두 테이블 : categories
및 videos
이 있는데, 피어 테이블이 belongsToMany 관계이므로이 테이블이 있습니다.Laravel belongsToMany where 중 하나가 없습니다
내가하려는 것은 많은 범주 중 하나에있는 비디오의 단일 인스턴스가없는 모든 비디오를 가져 오는 것입니다.
- 비디오 1
- 비디오 3 카테고리에 1
내가 얻을하고자하는 카테고리 1, 2, 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
더러운 솔루션의 비트는 것 진술에없는 곳에서는 2를, 두 범주 모두에 대해서는 1을 사용하십시오. – milo526
그래,하지만 나는 문자 그대로 약 100 개의 카테고리를 가지고 있다고 생각했는데, 나는 항상 foreach 할 수 있다고 생각하니? – Karl
실제로, 심지어 어디에서와 같은 반환하지 않습니다 NotIn, 그렇지 않을까요? – Karl