Laravel属于ToMany,其中没有一个

时间:2017-05-06 14:07:44

标签: php mysql laravel eloquent has-and-belongs-to-many

我有两个表:categoriesvideos,然后我有一个数据透视表,因为它是belongsToMany关系。

我要做的是获取所有视频,其中没有一个视频实例属于多种类别之一。

e.g。

  • 视频1属于第1,2和3类。
  • 视频2属于第1类和第3类。
  • 视频3属于第1类。

我想获得不属于类别2或3的视频,这意味着这将返回视频3。

到目前为止我尝试过的,但是没有给出预期的结果,这是因为仍然在视频1和2中找到了另一行,因为它们属于类别1:

Video::whereHas('categories', function($query) {
    $query->whereNotIn('category_id', [2,3]);
})->take(25)->get();

从中填充的查询是:

select * from `videos` where exists (select * from `categories` inner join 
`category_video` on `categories`.`id` = `category_video`.`category_id` where 
`videos`.`id` = `category_video`.`video_id` and `category_id` != ? and 
`category_id` != ? and `categories`.`deleted_at` is null) and `videos`.`deleted_at` 
is null order by `created_at` desc limit 25

1 个答案:

答案 0 :(得分:3)

您可以使用Eloquent whereDoesntHave()约束来获取所需内容:

// get all Videos that don't belong to category 2 and 3
Video::whereDoesntHave('categories', function($query) {
  $query->whereIn('id', [2, 3]);
})->get();