2015-11-26 7 views
6

Chcę uzyskać wszystkie rekordy z tabeli, która nie istnieje w innej tabeli w Laravel 5.1.Wybierz wszystkie rekordy z jednej tabeli, które nie istnieją w innej tabeli w Laravel 5.1

wiem, jak to zrobić w jądra PHP, i to działa dobrze z następującego kodu

SELECT t1.name 
FROM table1 t1 
LEFT JOIN table2 t2 ON t2.name = t1.name 
WHERE t2.name IS NULL 

modelu

public function audiences() 
{ 
return $this->belongsTo('App\BridalRequest', 'request_id'); 
} 

ale gdy próbuję zrobić to samo w laravel za pomocą następującego kodu:

$all_bridal_requests_check = \DB::table('bridal_requests') 
        ->where(function($query) 
        { 
         $query->where('publisher', '=', 'bq-quotes.sb.com') 
           ->orWhere('publisher', '=', 'bq-wd.com-bsf'); 
        }) 
        ->whereNotIn('id', function($query) { $query->table('audiences')->select('request_id'); }) 
        ->orderBy('created_on', 'desc') 
        ->get(); 

to daje mi to er ror

Call to metoda niezdefiniowany Illuminate \ database \ Zapytanie \ Builder :: Stół()

+1

Czy zdefiniowałeś relację w klasie modelu? – Saani

+0

@Saani tak, zrobiłem .. –

+0

czy możesz podać kod klasy modelu? – Saani

Odpowiedz

9

Powyższa kwerenda może być zbudowany przy użyciu kreator zapytań laravel w następujący sposób.

SELECT t1.name 
FROM table1 t1 
LEFT JOIN table2 t2 ON t2.name = t1.name 
WHERE t2.name IS NULL 

Jest to odpowiednik poniższego zapytania zbudowanego przy użyciu narzędzia do tworzenia zapytań Laravel.

\DB::table('table1 AS t1') 
->select('t1.name') 
->leftJoin('table2 AS t2','t2.name','=','t1.name') 
->whereNull('t2.name')->get();