2017-08-10 98 views
1

這是我目前擁有的代碼:Laravel排序依據與列值

$programmefundings = Programmefunding::where('status', '!=', 'draft')->orderByRaw("FIELD(status , 'open', 'announced', 'delayed', 'closed') ASC")->orderBy('date_start', 'desc')->get(); 

所以它得到所有我programmefundings,除了與狀態「草稿」的那些,從重新排序他們「開放」'已關閉'並將它們排列爲'date_start'

我需要重新安排其在「ASC」秩序中的地位「宣佈」由另一列「announcement_date」的programmefundings不干擾「開放」「關閉」結構它目前擁有並且不影響任何沒有狀態值'宣佈'的其他程序設計。

這是可能的,有誰知道如何做到這一點?

謝謝!

回答

1

您應該可以通過IF聲明來做到這一點。

$programmefundings = Programmefunding::where('status', '!=', 'draft') 
    ->orderByRaw("FIELD(status , 'open', 'announced', 'delayed', 'closed') ASC") 
    ->orderByRaw("IF(status = 'announced', accouncement_date, date_start) DESC") 
    ->get(); 
+0

工作過,謝謝! :) – Jawee

1

我認爲你要做的就是這樣的事情。它將按照公告日期首先公佈的所有項目排序,然後按date_start排序其他所有項目。

$programmefundings = Programmefunding::where('status', '!=', 'draft') 
    ->orderByRaw("case when status = 'announced' then announcement_date end asc") 
    ->orderBy('date_start', 'desc')->get();