gpt4 book ai didi

php - Laravel belongsToMany 没有其中之一

转载 作者:可可西里 更新时间:2023-11-01 07:05:54 27 4
gpt4 key购买 nike

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

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

例如

  • 视频 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

最佳答案

你可以使用 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();

关于php - Laravel belongsToMany 没有其中之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43821403/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com