我的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 方法中只获得一次提交。但限制功能无法正常工作。它不会返回任何错误。它返回每个团队的所有提交。我只想提交一份。我如何使它工作?
答案 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)