2014-04-11 11 views
7

क्या किसी भी तरह से, किसी रिलेशनशिप फ़ंक्शन के पैरामीटर को पास करना संभव है?लार्वेल: रिलेशनशिप फ़ंक्शन पर पैरामीटर पास करें?

public function achievements() 
{ 
    return $this->belongsToMany('Achievable', 'user_achievements')->withPivot('value', 'unlocked_at')->orderBy('pivot_unlocked_at', 'desc'); 
} 

समस्या यह है कि, कुछ मामलों में, यह unlocked_at स्तंभ लाने नहीं करता है और यह एक त्रुटि देता है:

मैं निम्नलिखित वर्तमान में है।

public function achievements($orderBy = true) 
{ 
$result = $this->belongsToMany (...) 
if($orderBy) return $result->orderBy(...) 
return $result; 
} 

और के रूप में इसे कहते:

मैं की तरह कुछ करने की कोशिश की है

$member->achievements(false)->(...) 

लेकिन यह काम नहीं करता। क्या pivot_unlocked_at का उपयोग किया जा रहा है या नहीं, यह जांचने के लिए उस फ़ंक्शन में पैरामीटर को पास करने का कोई तरीका है या नहीं?

+4

आप जो कह रहे हैं उसे करने के लिए आपको ठीक होना चाहिए। आपको याद रखने की ज़रूरत है कि यदि आप गुणों पर विधि के रूप में उन्हें कॉल करते हैं तो संबंध कार्य अलग-अलग कार्य करते हैं। यदि आप उन्हें गुणों के रूप में उपयोग करते हैं तो आपको परिणाम सेट (संग्रह) मिलता है, लेकिन यदि आप उन्हें विधियों के रूप में कॉल करते हैं तो आपको एक क्वेरी बिल्डर मिल जाता है। यदि आप उन्हें पैरामीटर पास करना चाहते हैं तो आपको स्पष्ट रूप से उन्हें विधियों के रूप में कॉल करना होगा, इसलिए सुनिश्चित करें कि आप अपने कॉलिंग कोड में '-> get() 'करें:' $ सदस्य-> उपलब्धियां (सत्य) -> प्राप्त करें() -> (...) '' $ सदस्य-> उपलब्धियों के बराबर होगा -> (...) '। – alexrussell

+0

awsm @alexrussell। मुझे सिरदर्द बचाया .... –

+0

2014 से मेरी सलाह खुशी है अभी भी प्रासंगिक है :) – alexrussell

उत्तर

3

वैसे मैंने जो किया है वह सिर्फ मेरे मॉडल में नई विशेषता जोड़ रहा था और फिर उस स्थिति को मेरी अटारीबूट में जोड़ दिया, बस यह किया।

Class Foo extends Eloquent { 
    protected $strSlug; 

    public function Relations(){ 
     return $this->belongsTo('Relation','relation_id')->whereSlug($this->strSlug); 
    } 
} 

Class FooController extends BaseController { 
    private $objFoo; 


    public function __construct(Foo $foo){ 
     $this->objFoo = $foo 
    } 

    public function getPage($strSlug){ 
     $this->objFoo->strSlug = $strSlug; 
     $arrData = Foo::with('Relations')->get(); 
     //some other stuff,page render,etc.... 
    } 
} 
संबंधित मुद्दे