Laravel Eloquent 多对多查询 whereIn

Laravel Eloquent Many-to-Many query whereIn

在我的应用程序中,我已将关系从 one-to-many 更新为 many-to-many,并且我正在尝试找出一种方法来保留关联的功能。

假设我有两个相关表,例如狗和主人。如果我有一组主人,并且我正在尝试获取这些主人的狗 ID 列表,我应该如何雄辩地做到这一点?

这里有人提出了类似的问题: https://laracasts.com/discuss/channels/laravel/getting-many-to-many-related-data-for-an-array-of-elements

那么,我如何获得 Dog 模型,其中 Owner 在数组中?

$associatedDogs = Dog::whereIn('owner_id',$ListOfOwners)->get(); 相同的是 One-To-Many 关系,但 Many-to-Many.

尝试

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

使用whereHas()方法:

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

我尝试了两个建议的解决方案,但收到一条错误消息,指出 id 不是唯一的。 我是这样解决的:

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