基本上我想在Laravel中构建tihs查询,但它不起作用。
SELECT films.id, films.name AS film
FROM films
WHERE films.id NOT IN
(
SELECT films.id
FROM actors, actor_film, films
WHERE actors.id = actor_film.actor_id
AND actor_film.film_id = films.id
GROUP BY films.id
)
ORDER BY films.id DESC
LIMIT 600
;
使用“whereNotIn”我写了这两个查询: 第一个获得数据库中的所有电影,至少有一个演员如此关联:
$films_with_actors = DB::table('films')
->join('actor_film', 'actor_film.film_id', '=', 'films.id')
->join('actors', 'actors.id', '=', 'actor_film.actor_id')
->select( 'films.id')
->groupBy('films.id')
->get();
现在我想要获得没有关联演员的电影。为此,我试图获取以前方法中未包含的ID,如下所示:
$films_with_no_actors = DB::table('films')
->whereNotIn('films.id', $films_with_actors)
->orderBy('films.id', 'desc')
->take(500)
->get();
-
任何帮助?
答案 0 :(得分:2)
我根据您分享的代码为您提供基本解决方案。
在laravel中,您有一个名为pluck的方法,用于检索包含给定键的所有值的数组。
因此,您只能获得$ films_with_actors的ID。类似的东西(基于你的第一个查询):
$films_with_actors = DB::table('films')
->join('actor_film', 'actor_film.film_id', '=', 'films.id')
->join('actors', 'actors.id', '=', 'actor_film.actor_id')
->select( 'films.id')
->groupBy('films.id')
->pluck('id')->toArray();
现在你有一个带有id的数组,你可以在第二个查询的whereNotIn子句中包含该数组:
$films_with_no_actors = DB::table('films')
->whereNotIn('films.id', $films_with_actors)
->orderBy('films.id', 'desc')
->take(500)
->get();