从在Laravel中关系都具有条件​​active = 1的DB中检索记录

时间:2017-09-26 19:44:01

标签: laravel laravel-eloquent

我对Eloquent查询有点困惑。我有2个对象,食谱和配料。食谱可以容纳许多成分。成分可以设置为活动与否。 我想要实现的是运行一个只返回含有活性成分的食谱的查询。因此,如果一个或多个配方的成分设置为无效,我根本不想在配方中使用配方。

我到目前为止所做的是

$recipes = Recipe::with(['ingredients' => function($query){
    $query->where('active', 1);
}, 'image', 'user',  'ingredients.unit', 'comments.user'])->where('share', 1)->get();

但这只是没有活跃的成分。

希望有人能指出我正确的方向。

1 个答案:

答案 0 :(得分:1)

问题是你正在过滤你的成分,而不是你应该使用whereDoesntHave方法。像这样更改你的代码。

Recipe::where('share', 1)->whereDoesntHave('ingredients' , function($query) 
{
    $query->where('active', '=', 0);
})->with(['image', 'user',  'ingredients.unit', 'comments.user'])->get();

试一试。 Reference