2017-03-09 54 views
7

W mojej aplikacji zaktualizowałem relację z one-to-many do many-to-many i próbuję znaleźć sposób na utrwalenie powiązanej funkcjonalności.Laravel Wymowne zapytanie Wiele do wielu, w którym

Załóżmy, że mam dwie powiązane tabele, np. psy i właściciele. Jeśli mam szereg właścicieli i próbuję uzyskać listę identyfikatorów psów dla tych właścicieli, jak mam to zrobić elokwentnie?

Podobne pytanie został poproszony tutaj: https://laracasts.com/discuss/channels/laravel/getting-many-to-many-related-data-for-an-array-of-elements

Tak, jak byłoby uzyskać modele Dog gdzie Owner jest w tablicy?

To samo, co $associatedDogs = Dog::whereIn('owner_id',$ListOfOwners)->get(); dla relacji One-To-Many, ale dla Many-to-Many.

Odpowiedz

9

użyć metody whereHas():

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

należy wybrać opcję '' whereHas' nad with'? Jaka jest między nimi różnica w tym przypadku? Czy robi to jakąkolwiek różnicę? –

+0

Nieważne, znalazłem wyjaśnienie tutaj: http://stackoverflow.com/a/30232227/2012740 –

+0

@AngelinCalu tak, 'z()' nie będzie działać dla ciebie, ponieważ ładuje dane relacji. –

1

Spróbuj

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