2015-06-11 45 views
3

我使用laravel 4.2, 我有一個名爲pois的表,它包含一些poi(poi =興趣點),我有第二個表,其中包含用戶郵票的郵票。Laravel select select

所以我想有3 pois用戶有最大數量的郵票。 我的問題是我不知道如何使用laravel查詢。 我得到了我的結果使用SQL請求,但它不是這樣做的好方法。 這裏我的SQL請求:

$pois = DB::select("SELECT *, (SELECT count(*) from stamps WHERE pois.id = stamps.poi_id) nbr_stamps FROM pois order by nbr_stamps DESC limit 3"); 

你能告訴我如何與laravel查詢來做到這一點?

回答

2

您應該使用selectRaw()而不是select()和單獨的查詢的其他部分相關的方法:

$pois = DB::select(DB:raw("*, (SELECT count(*) from stamps WHERE pois.id = stamps.poi_id) nbr_stamps")) 
    ->from('pois') 
    ->orderBy('nbr_stamps', 'DESC') 
    ->limit(3); 

閱讀Query Builder documentation

+0

快速回復,好一個! – Deep

+0

謝謝,但我得到了以下錯誤: call_user_func_array()期望參數1是一個有效的回調,類'Illuminate \ Database \ MySqlConnection'沒有方法'selectRaw' – Jeffrey

+0

@Barzull'DB'應該'照亮\支持\外立面\ DB'。將'use DB'添加到文件頂部並重試。 –

2

@thanks到limonte的文檔鏈接,我找到了正確的方式來寫,選擇原料,解決方案在這裏:

$pois = DB::table('pois') 
     ->select(DB::raw("*, (SELECT count(*) from stamps WHERE pois.id = stamps.poi_id) nbr_stamps")) 
     ->orderBy('nbr_stamps', 'DESC') 
     ->take(3) 
     ->get(); 

有一個愉快的一天;)