2015-12-06 91 views
2

我有兩個表候選&連接數據透視表的結果稱爲結果。Laravel 5過濾器的關鍵

我想要做的是選擇該中心的所有候選人,並通過數據透視表中的值篩選它們。

所以選擇從哪裏轉動「狀態」 =「已註冊」

我曾嘗試各種不同的方法,並與下面的一個是當前但沒有什麼工作中心1所有候選人。

$candidates = Candidate::where('batch_centre_id','=', $id)->with(array('qualification' => function($q) 
{ 
    $q->wherePivot('status','=', 'REGISTERED'); 
}))->get(); 

任何建議,將不勝感激

回答

1

在鋒wherePivot方法只能在一個關係被加載。你這樣做的方式,你打電話給資格關係,因此你提取所有候選人,然後,對於他們每個人,你正在加載狀態= registered的資格。這就是爲什麼你得到所有候選人

您可以通過使用Eloquent的whereHas()方法來讓它過濾您嘗試通過某些關係的屬性獲取的基礎模型。在你的情況下,下面應該工作:

$candidates = Candidate::where('batch_centre_id','=', $id) 
    ->whereHas('qualifications', function($q) { 
    $q->wherePivot('status','=', 'REGISTERED'); 
    })->with('qualifications')->get(); 

這樣你會得到只有有身份資格= REGISTERED他們所有的資格候選人。如果您想通過狀態還過濾裝資格,加約束就像你在你的代碼所做的:

$candidates = Candidate::where('batch_centre_id','=', $id) 
    ->whereHas('qualifications', function($q) { 
    $q->wherePivot('status','=', 'REGISTERED'); 
    })->with(array('qualifications', function($q) { 
    $q->wherePivot('status','=', 'REGISTERED'); 
    })->get(); 
+0

非常感謝你!!!! :d – 0w3n86