web-dev-qa-db-fra.com

Laravel Requête plusieurs-à-plusieurs éloquente whereIn

Dans mon application, j'ai mis à jour une relation de one-to-many À many-to-many Et j'essaie de trouver un moyen de conserver les fonctionnalités associées.

Disons que j'ai deux tableaux liés, par exemple chiens et propriétaires. Si j'ai un éventail de propriétaires et que j'essaie d'obtenir une liste des identifiants des chiens pour ces propriétaires, comment dois-je le faire avec éloquence?

Une question similaire a été posée ici: https://laracasts.com/discuss/channels/laravel/getting-many-to-many-related-data-for-an-array-of-elements

Alors, comment puis-je obtenir les modèles DogOwner est dans un tableau?

La même chose que $associatedDogs = Dog::whereIn('owner_id',$ListOfOwners)->get(); est pour une relation One-To-Many, Mais pour Many-to-Many.

9
Angelin Calu

Utilisez la méthode whereHas() :

$dogs = Dog::whereHas('owners', function($q) use($ownerIds) {
    $q->whereIn('id', $ownerIds);
})->get();
27
Alexey Mezenin

Essayer

$associateDogs = Dog::with(['owners' => function($query) use ($listOfOwners) {
    $query->whereIn('id', $listOfOwners);
}])->get();
1
EddyTheDove