Laravel查询关系存在

时间:2018-06-10 09:54:40

标签: laravel eloquent

我的Laravel控制器中有以下查询:

public function getTeams(){      
  $teams = Team::whereHas('submissions', function($q){
    $q->limit(1);
  })->with(['submissions'])->get();

  return response()->json(['data'=>$teams]);
}

团队模型:

   public function submissions(){
        return $this->hasMany('App\submission', 'team_id', 'id');
    }

提交模式:

public function team(){
    return $this->belongsTo('App\Team', 'id', 'team_id');
}

现在我想在 getTeams 方法中只获得一次提交。但限制功能无法正常工作。它不会返回任何错误。它返回每个团队的所有提交。我只想提交一份。我如何使它工作?

enter image description here

2 个答案:

答案 0 :(得分:1)

 $teams = Team::whereHas('submissions')
    ->with([
        'submissions' => function($query) {
            $query->limit(1);
        }
    ])->get();

答案 1 :(得分:1)

没有简单的方法可以限制预先加载。

您可以使用HasOne关系:

public function submission() {
    return $this->hasOne('App\submission', 'team_id', 'id');
}

$teams = Team::has('submission')->with('submission')->get();

这仍然会在后台获取所有提交内容,但每个$team只显示一个。

BTW:您可以通过删除has('submission')并在之后过滤团队来改进查询。

$teams = Team::with('submission')->get();
$teams = $teams->where('submission', '!==', null)