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

Retrieve records from DB whose relations all have condition active=1 in Laravel

我有点卡在 Eloquent 查询上。我有 2 个对象,食谱和配料。食谱可以包含许多成分。成分可以设置为活跃或不活跃。 我想要实现的是 运行 查询 returns 只有含有活性成分的食谱。因此,如果将一种或多种食谱的成分设置为无效,我根本不想要结果中的食谱。

到目前为止我得到的是

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

但这只是遗漏了非活性成分。

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

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

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

试试吧。 Reference