我正在编写代码来获取Laravel中的嵌套对象。我想知道是否可以在hasMany或belongsTo中写条件。
这就是我正在做的事情,这使问题变得清晰:
$posts = Post::where(
array(
'status' => 'active'
)
)
->orderBy('id', 'asc')
->with(['postResponsibilities' => function($query){
$query->where('status', 'active');
}])
->with(['postRequirements' => function($query){
$query->where('status', 'active');
}])
->with(['postSalaries' => function($query){
$query->where('status', 'active');
}])
->skip($limit * ($page - 1))->take($limit)->get();
因此,我必须使用嵌套查询来获取状态 活动的记录。
在Post模型中,我写过:
public function postRequirements(){
return $this->hasMany('App\Models\PostRequirement', 'post_id');
}
public function postResponsibilities(){
return $this->hasMany('App\Models\PostResponsibility', 'post_id');
}
public function postSalaries(){
return $this->hasMany('App\Models\PostSalary', 'post_id');
}
有没有办法可以在嵌套模型中定义状态条件? 所以我可以写:
$posts = Post::where(
array(
'status' => 'active'
)
)
->orderBy('id', 'asc')
->with('postResponsibilities')
->with('postRequirements')
->with('postSalaries')
->skip($limit * ($page - 1))->take($limit)->get();
我希望问题很明确,谢谢
答案 0 :(得分:2)
您可以做的是将这些条件应用于您在Post模型上放置的关系方法中,例如:
class Post
{
public function postRequirements() {
return $this->hasMany('App\Models\PostRequirement', 'post_id')
->where('status', 'active');
}
}
答案 1 :(得分:0)
是的,可以急切加载多种关系。
请参阅:https://laravel.com/docs/master/eloquent-relationships#eager-loading
在你的情况下,它会是这样的:
Post::with('postResponsibilities', 'postRequirements', 'postSalaries')->where()....