2016-06-08 15 views
7

मैं एक उत्पाद मॉडल हैलार्वेल एक एलोक्वेंट मॉडल में एक कस्टम फ़ंक्शन कैसे जोड़ें?

class Product extends Model 
{ 
    ... 

    public function prices() 
    { 
     return $this->hasMany('App\Price'); 
    } 

    ... 
} 

मैं एक समारोह जो सबसे कम कीमत वापस आ जाएगी जोड़ना चाहते हैं, और नियंत्रक में मैं मान का उपयोग कर प्राप्त कर सकते हैं: मैं उत्पाद मॉडल में इसे जोड़ा

Product::find(1)->lowest; 

:

:

public function lowest() 
{ 
    return $this->prices->min('price'); 
} 

लेकिन मैं कह एक त्रुटि मिली

और यदि मैं Product::find(1)->lowest(); का उपयोग करता हूं, तो यह काम करेगा। क्या काम करने के लिए Product::find(1)->lowest; प्राप्त करना संभव है?

किसी भी मदद की सराहना की जाएगी।

+0

कोई ओएफसी क्योंकि आप एक विधि मुझे लगता है कि tgat एक hasone संबंध के लिए ही काम करेंगे बुला रहे हैं, और क्या अंतर है? के साथ या बिना! –

उत्तर

19

जब आप एक चर के रूप में मॉडल में किसी फ़ंक्शन तक पहुंचने का प्रयास करते हैं, तो लार्वेल मानता है कि आप एक संबंधित मॉडल को पुनर्प्राप्त करने का प्रयास कर रहे हैं। वे उन्हें गतिशील गुण कहते हैं। इसके बजाय आपको एक कस्टम विशेषता है। अपने मॉडल को विधि निम्नलिखित

ऐड:

public function getLowestAttribute() 
{ 
    //do whatever you want to do 
    return 'lowest price'; 
} 

अब आप इस तरह इसे उपयोग करने में सक्षम होना चाहिए: क्यों तुम सिर्फ न ऐसा करने

Product::find(1)->lowest; 
+1

मुझे एहसास नहीं हुआ कि आप उन गुणों के साथ ऐसा कर सकते हैं जिन्हें अंतर्निहित तालिका में कॉलम के रूप में परिभाषित नहीं किया गया था; दस्तावेज़ीकरण में उल्लेख नहीं किया गया था (जो मुझे मिल सकता है)। –

+0

हैलो मुझे यह भी जानने में दिलचस्पी होगी कि मैं इसे लैरावेल दस्तावेज़ीकरण में कहां पा सकता हूं। धन्यवाद। – sanders

+0

मुझे लगता है कि यह सबसे कम होना चाहिए(); - मुझे उस अंतराल के बिना रिलेशनशिप त्रुटि मिलती है '()' – caro

1

? मुझे पता है, यह नहीं है कि आपने विशेष रूप से पूछा है और कभी-कभी यह एक बुरी आदत है। लेकिन आपके मामले में मुझे लगता है कि यह अच्छा है।

$product = Product::find(1)->with(['prices' => function ($query) { 
    $query->min('price'); 
}])->get(); 
+0

वह मॉडल में एक फ़ंक्शन के लिए स्पष्ट रूप से अनुरोध करता है। –

+0

मुझे पता है, मैंने अभी उसे एक दूसरा अपहरण दिया है। –

8

सुवक्ता उपयोग accessors

public function getLowestAttribute() 
{ 
    return $this->prices->min('price'); 
} 

फिर

$product->lowest; 
संबंधित मुद्दे