2017-02-26 196 views
0

我有以下查詢始建通過Laravel:爲什麼查詢返回空集合?

$res = Announcement::whereExists(function ($query) { 
       $query->select(DB::raw(1)) 
        ->from('announcement_category')->join('user_category', 'user_category.category_id', '=', 'announcement_category.category_id') 
        ->where('user_category.user_id', '=', 1) 
        ->where('announcement_category.announcement_id', '=', 'announcements.id'); 
      }); 

dd($res->get()); 

上面的代碼給我空集:dd($res->get());

此查詢的普通的SQL代碼:

select * from `announcements` where exists (select 1 from 
`announcement_category` inner join `user_category` on 

`user_category`.`category_id` = `announcement_category`.`category_id` where `user_category`.`user_id` = 1 

and `announcement_category`.`announcement_id` = announcements.id) 

and `announcements`.`deleted_at` is null 

如果直接在MySQL執行此,我得到兩個結果行。

但是爲什麼dd($res->get());迴廊空?

+0

你爲什麼用'DB ::原料(1)'在SELECT子句? – mrabbani

+0

如果使用'*'結果相同 – Darama

回答

1

我不認爲這是在雄辯模型whereExists ...試試這個:

$res = DB::table('announcement')->whereExists(function ($query) { 
       $query->select(DB::raw(1)) 
        ->from('announcement_category')->join('user_category', 'user_category.category_id', '=', 'announcement_category.category_id') 
        ->where('user_category.user_id', '=', 1) 
        ->where('announcement_category.announcement_id', '=', 'announcements.id'); 
      })->get(); 
+0

它是:[link](https://laravel.com/api/5.4/Illuminate/Database/Query/Builder.html#method_whereExists) – d1c1pl3