2017-09-26 3 views
1

Je suis un peu bloqué sur une requête Eloquent. J'ai 2 objets, Recettes et Ingrédients. Les recettes peuvent contenir de nombreux ingrédients. Les ingrédients peuvent être activés ou non. Ce que j'essaye de réaliser est d'exécuter une requête qui retourne seulement des recettes avec des ingrédients actifs. Donc, si un ou plusieurs des ingrédients d'une recette sont désactivés, je ne veux pas du tout la recette dans le résultat.Récupérer les enregistrements de DB dont les relations ont toutes la condition active = 1 dans Laravel

Ce que j'ai jusqu'à présent est

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

Mais cela laisse tout simplement des ingrédients non actifs. En espérant que quelqu'un puisse pointer en moi dans la bonne direction.

Répondre

1

Le problème est que vous filtrez vos ingrédients au lieu de cela, vous devriez utiliser la méthode whereDoesntHave. Changez votre code comme ceci.

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

Essayez-le. Reference