我有两个候选资格表和一个连接数据透视表称为results。
我要做的是选择这个中心的所有候选对象,并按透视表中的值筛选它们。
因此,从中心1选择所有候选人,其中枢轴“status”=“registered”
我已经尝试了很多方法,目前与下面的一个,但没有任何工作。

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

任何建议都将不胜感激

最佳答案

其中pivot方法只能加载到关系上。你这样做的方式,你是在资格关系上调用它,因此你要获取所有的候选人,然后,对于他们中的每一个,你要加载status=registered的资格。所以你得到了所有的候选人。
您可以使用雄辩的wherehas()方法来解决这个问题,该方法允许您根据某个关系的属性筛选要获取的基本模型。在您的情况下,以下操作应该有效:

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

这样,您将只获得具有status=已注册资格的候选人及其所有资格。如果要按状态另外筛选加载的资格,请像在代码中那样添加约束:
$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();

关于php - Laravel 5枢轴上的过滤器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34119005/

10-12 04:07