Laravel orderBy有两个子句,一个使用leftJoin

时间:2017-11-17 22:44:43

标签: php sorting laravel-5

我有两个表 - canvas和canvas_details - 一个canvas可以有多个canvas_details。

TABLE 'canvas'(
    'id'
    'name'
    'canvas_type'
    'created_at'
    'updated_at')

TABLE 'canvas_details' (
    'id'
    'canvas_id'
    'block_number'
    'block_title'
    'color'
    'size'
    'notes'
    'image'
    'order'
    'created_at'
    'updated_at')

在我的控制器中,我有一个功能:

public static function canvasList($id){
    $canvas_list = \DB::table('canvas')
    ->select(\DB::raw('distinct(canvas.id),canvas.name'))
    ->join('canvas_user','canvas.id','=','canvas_user.canvas_id')
    ->leftJoin('canvasdetails','canvas.id','=','canvasdetails.canvas_id')
    ->where('canvas_user.user_id',$id)
    ->orderBy('canvas.updated_at','desc')       
    ->get();
    return $canvas_list}

我用它来显示每个用户在上次更新画布时排序的画布名称列表。

创建画布时,它最初没有任何canvas_details。创建或更新关联的canvas_details不会更新canvas updated_at字段,但会更新canvas_details updated_at字段。

我需要做的是在上次更新canvas_details时进行排序。

我想在最后更新的画布或最后更新的canvas_details上显示排序desc的画布名称列表。

考虑画布可能有也可能没有canvas_details - 是否有办法根据canvas_details记录的存在添加该类?

该项目在Laravel 5.2

0 个答案:

没有答案