首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何orderBy列,如果它存在(否则使用另一列)雄辩?

如何orderBy列,如果它存在(否则使用另一列)雄辩?
EN

Stack Overflow用户
提问于 2016-02-11 23:35:52
回答 2查看 2.1K关注 0票数 2

articles表有两个时间戳列:created_atpublished_at

只有当用户希望稍后发布文章时才使用published_at (如果published_at不是null且时间尚未到来,则文章是隐藏的)。

我想按时间戳对文章进行排序(显示最近的)。要排序的时间戳是published_at,如果它不是null,则使用created_at

有什么能言善辩的方法吗?我想把它和其他约束一起使用,我更愿意把这个顺序作为范围。

我正在尝试这样的方法

代码语言:javascript
代码运行次数:0
运行
复制
public function scopeRecent($query)
{
    $query->orderBy('ifnull(published_at, created_at)');
}

但MySQL的回复是Unknown column 'IFNULL(published_at, created_at)'

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-12 00:03:23

您必须这样做,因为ifnull不是由Illuminate\Database\Query\Builder处理的

代码语言:javascript
代码运行次数:0
运行
复制
public function scopeRecent($query)
{
    $query->orderByRaw('ifnull(published_at, created_at)');
}
票数 2
EN

Stack Overflow用户

发布于 2017-10-05 19:49:42

如果有人在使用Postgres,就像:

代码语言:javascript
代码运行次数:0
运行
复制
public function scopeRecent($query){
    $query->orderByRaw('COALESCE(published_at, created_at)');
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35352204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档