2015-12-06 46 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