2016-12-12 11 views
0

기본적으로 Laravel에서 tihs 쿼리를 작성하려고하지만 작동하지 않습니다. 이제 내가 원하는Laravel. 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(); 

: 첫 번째는 적어도 배우가 같이 연결 한 데이터베이스에있는 모든 영화를 얻을 : A는 "whereNotIn"나는이 두 쿼리를 작성했습니다 사용

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 
; 

배우와 관련이없는 영화를 얻는 것. 이를 위해 저는 다음과 같이 이전 방법에 포함되지 않은 ID를 얻기 위해 노력하고 있어요 :

$films_with_no_actors = DB::table('films') 
     ->whereNotIn('films.id', $films_with_actors) 
     ->orderBy('films.id', 'desc') 
     ->take(500) 
     ->get(); 
     - 

어떤 도움을?

답변

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(); 
+0

감사합니다. 하지만 두 번의 조사를해야한다는 뜻인가요? MySQL 에서처럼 다른 것을 내부에 임베드 할 수 없습니까? –

+0

걱정하지 않아도 첫 번째 쿼리를 만든 후에 호출하면 문제가 해결됩니다. $ films_with_actors_ids = $ films_with_actors-> pluck ('id') -> toArray(); –