Laravel 5 如果在Eloquent中存在列(否则使用另一列),如何按列排序?
Laravel 5 如果在Eloquent中存在列(否则使用另一列),如何按列排序?,laravel-5,eloquent,Laravel 5,Eloquent,文章表有两个时间戳列:在处创建和在处发布 仅当用户希望在以后发布文章时才使用位于的published_(如果published_at不为空且时间尚未到来,则文章将隐藏) 我想按时间戳对文章进行排序(以显示最近的文章)。排序依据的时间戳为published\u at,如果不为空,则使用created\u at 有没有一种雄辩的方法可以做到这一点?我希望将其与其他约束一起使用,更希望将此排序作为范围 我正在尝试类似的东西 public function scopeRecent($query) {
文章表
有两个时间戳列:在
处创建和在
处发布
仅当用户希望在以后发布文章时才使用位于的published_(如果published_at
不为空且时间尚未到来,则文章将隐藏)
我想按时间戳对文章进行排序(以显示最近的文章)。排序依据的时间戳为published\u at
,如果不为空,则使用created\u at
有没有一种雄辩的方法可以做到这一点?我希望将其与其他约束一起使用,更希望将此排序作为范围
我正在尝试类似的东西
public function scopeRecent($query)
{
$query->orderBy('ifnull(published_at, created_at)');
}
但是MySQL使用Unknown列'IFNULL(published\u at,created\u at)
进行回复,您必须这样做,因为IFNULL
不是由illumb\Database\Query\Builder处理的:
public function scopeRecent($query)
{
$query->orderByRaw('ifnull(published_at, created_at)');
}
如果有人正在使用Postgres,则可能是:
public function scopeRecent($query){
$query->orderByRaw('COALESCE(published_at, created_at)');
}
你是在寻找一个基于雄辩的解决方案吗?@Wistar我更喜欢雄辩的解决方案,因为我想将它用于雄辩的查询。但请随意发布其他解决方案——如果我没有找到一个雄辩的解决方案,我可能需要它。