2015-09-20 55 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