Laravel。使用WHERENOTIN

时间:2016-12-12 18:26:16

标签: mysql laravel query-builder

基本上我想在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();
        -

任何帮助?

1 个答案:

答案 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();