2015-09-20 49 views
3

我在我的雄辯模型中有以下範圍,我想向它添加兩個條件。我需要幫助。有條件的表加入

public function scopeImages($query) { 
    $query->join('images as i', function ($join) { 
     $join->on('i.vessel_id', '=', 'vessel.id') 
     ->where('i.sort', '=', 'min(i.sort)'); 
    }) 
    ->leftjoin('users', 'users.id', '=', 'vessel.user_id') 
    ->select('vessel.*', 'i.image as image', 'users.name as brokername'); 
} 

images表有featuredsort列。我想選擇其中images.featured is 1min sort的返回結果。如果沒有images.featured=1那麼我想選擇min of sort

目前上述範圍的每個vessel_id

+0

你想用最後一個行結束,或每個圖像一行? – Chris

+0

@Chris每艘船一排 –

回答

0

選擇的min sort圖像如果通過功能命令(如果展出的是布爾)的遞減和排序在遞增,它會列出在優先級最高,然後列表排序,從功能的1分鐘到最大。現在,如果你拿第一排,你會得到你想要的。

$query->join('images', 'images.vessel_id', '=', 'vessel.id') 
     ->leftjoin('users', 'users.id' ,'=', 'vessel.user_id') 
     ->select('vessel.*', 'images.image as image', 'users.name as brokername') 
     ->orderBy('images.featured', 'DESC') 
     ->orderBy('images.sort', 'ASC') 
     ->take(1); 
+0

感謝您的回答。我想要做的是,對於每個'image.vessel_id = vessel.id'我想'where images.sort = min(images.sort)'。例如,查看原始查詢http://stackoverflow.com/questions/7588142/mysql-left-join-min –

+0

我更新了問題中的代碼,請檢查。 –

0

你需要一個相關子查詢

https://dev.mysql.com/doc/refman/5.5/en/correlated-subqueries.html

SELECT v.*, 
(SELECT `image` FROM images WHERE vessel_id = v.id ORDER BY featured DESC, sort LIMIT 1) AS image 
    FROM `vessel` AS v 

@EDIT 你可以試試這個:

public function scopeImages($query) { 
    return $query 
     ->leftjoin('users', 'users.id', '=', 'vessel.user_id') 
     ->select(\DB::raw("vessel.*, (SELECT `image` FROM images WHERE vessel_id = vessel.id ORDER BY featured DESC, sort LIMIT 1) AS image, users.name as brokername")); 
} 
+0

謝謝@ ad4s我想要這個寫在Laravel雄辯。 –

+0

我編輯了我的答案。我沒有在框架中測試這個。它也很快捷。有時候這是最後的手段,但我可以忍受它;) – ad4s