从 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
我有点卡在 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