Laravel orderBy 与列值

Posted

技术标签:

【中文标题】Laravel orderBy 与列值【英文标题】:Laravel orderBy with column value 【发布时间】:2018-01-19 08:41:31 【问题描述】:

这是我目前拥有的代码:

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

因此,它获得了我所有的计划资金,除了状态为 'draft' 的那些,将它们从 'open' 重新排序为 'close' 并按 'date_start' 排列它们。

我需要在 'asc' 顺序中的另一列 'announcement_date' 中重新排序具有“已宣布”状态的 programfundings,而不会影响 'open' '已关闭' 结构,并且不影响任何其他不具有 'announced' 状态值的节目发现。

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

谢谢!

【问题讨论】:

【参考方案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();

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于Laravel orderBy 与列值的主要内容,如果未能解决你的问题,请参考以下文章

laravel框架orderBy问题

dplyr 滞后与列值中的 n

SSRS如果参数与列值不匹配,如何隐藏Tablix?

我想自学laraver,请诸位前辈给一些建议,谢谢

larave学习笔记1-安装配置

Larave中CSRF攻击