Laravel orderBy 列值

Laravel orderBy with column value

这是我目前拥有的代码:

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

所以它获得了我所有的项目资金,除了状态为 'draft' 的资金,从 'open'[=31 重新排序它们=] 到 'closed' 并按 'date_start'.

排列

我需要通过 'asc''announcement_date' 中的另一列重新排序状态为 'announced' 的项目资金'asc' 在不干扰 'open''closed' 结构的情况下排序没有状态值 'announced'.

这可能吗?有人知道怎么做吗?

谢谢!

我想你想要做的是这样的事情。它将按公告日期先公告状态的所有项目排序,然后按 date_start 对其他所有项目进行排序。

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

您应该可以使用 IF 语句来完成此操作。

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