2016-05-14 61 views
1

我Laravel查詢如何使排序依據ASC當列不是該表

$items = TypeServices::whereIn('id', $serviceIdEvent) 
           ->select('id', 'code', 'name', 'min_price', 'max_price', 
            DB::raw('(select(priority) from priority WHERE priority.map_id = type_service.id AND priority.map_type_id = ' . $pageType . ' AND priority.occasion_id = ' . $occasionId . ') as priority')) 
            ->orderBy(DB::raw('ISNULL(priority), priority'), 'ASC'); 

我從另一臺命名爲優先獲得優先考慮。(我也有優先級表的優先級列)

可用

我在優先表中保存服務表詳細信息,但是當我第一次優先考慮某些服務時,那麼到目前爲止沒有優先級的服務將首先列在清單中。

我希望那些至今沒有優先考慮的服務最終會到來。

回答

0

首先你應該在這種情況下使用連接。那麼你不需要任何東西來訂購:

$items = TypeServices::whereIn('id', $serviceIdEvent) 
    ->select('id', 'code', 'name', 'min_price', 'max_price', 'priority') 
    ->join('priority', function ($join) use ($pageType, $occasionId) { 
     $join->on('priority.map_id', '=', 'type_service.id'); 
     $join->on('priority.map_type_id', '=', DB::raw($pageType)); 
     $join->on('priority.occasion_id', '=', DB::raw($occasionId)); 
    }) 
    ->orderBy('priority');