Laravel 5过滤器在枢轴上

时间:2015-12-06 15:18:43

标签: php laravel laravel-5 eloquent

我有两张桌子候选人&具有加入数据透视表的资格称为结果。

我想要做的是选择该中心的所有候选人,并按透视表中的值过滤它们。

因此,选择中心1的所有候选人,其中枢轴“status”=“REGISTERED”

我尝试了很多方法,目前正在使用下面的方法,但没有任何方法可行。

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

非常感谢任何建议

1 个答案:

答案 0 :(得分:1)

在Eloquent wherePivot 方法中只能加载关系。你正在这样做的方式,你是在资格关系上调用它,因此你提取所有候选人然后,对于他们每个人,你正在加载status = REGISTERED的资格。这就是为什么你要所有候选人

你可以使用Eloquent的 whereHas()方法解决它,让你过滤你试图通过某种关系的属性获取的基本模型。在您的情况下,以下应该有效:

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

通过这种方式,您只能获得具有status = 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();