2014-04-11 34 views
7

Bir ilişki işlevine bir parametreyi iletmek mümkün mü?Laravel: İlişki İşlevine Geçiş Parametresi?

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

sorun bazı durumlarda, bu unlocked_at sütunu getirme gelmediğini ve bu hata verir:

Aşağıdaki şu anda var.

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

Ve diyoruz:

ben böyle bir şey yapmaya çalıştık

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

Ancak bu işe yaramaz. Parametrelere bu işleve veya pivot_unlocked_at'un kullanılmakta olup olmadığını kontrol etmenin bir yolu var mı?

+4

Söylediklerinizi yapmakta fayda var. İlişki fonksiyonlarının, özellikler üzerinde bir yöntem olarak adlandırılırsa farklı davranmasına rağmen, hatırlamanız gerekir. Bunları özellik olarak kullanırsanız sonuç kümesi (Koleksiyon) alırsınız, ancak bunları yöntem olarak çağırırsanız bir sorgu oluşturucu alırsınız. Onlara parametreler iletmek istiyorsanız, onları yöntem olarak çağırıyor olmalısınız, bu yüzden arama kodunuzda bir '-> get()' yaptığınızdan emin olun: '$ üye-> başarılar (doğru) -> get() -> (...) '' $ member-> achievements -> (...) 'ile eşdeğer olacaktır. – alexrussell

+0

awsm @alexrussell. bana bir baş ağrısı kurtardı .... –

+0

2014 benim tavsiyem sevindim hala alakalı :) – alexrussell

cevap

3

Yaptığım şey, modelime yeni bir özellik ekledim ve daha sonra durumumu bu attırmaya eklemek oldu, bunu yaptım.

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.... 
    } 
}