首页 > 解决方案 > Laravel 6.0 Eloquent - 按日期和状态排序

问题描述

尝试首先按最新日期订购我的桌子,然后是状态。Status 可以是(New、In Review、Declined、Closed),Status 是数据库中的一个枚举字段。

我尝试了几件事都没有成功。这是我与此代码最接近的。我是 Laravel 的新手,所以不知道该怎么做。

$inquiries = Inquiry::all()->sortByDesc('created_at')->sortByDesc('Status')->values();

这产生了这个:

-------------------------------------------------- ------------
| 姓名 | 创建于 | 状态 |
-------------------------------------------------- ------------
| 理查德 | 2020 年 5 月 2 日 | 新 |
-------------------------------------------------- ------------
| 詹姆斯 | 2020 年 5 月 2 日 | 新 |
-------------------------------------------------- ------------
| 克里斯汀 | 2020 年 4 月 16 日 | 拒绝 |
-------------------------------------------------- ------------
| 查尔斯 | 2020 年 4 月 14 日 | 新 |
-------------------------------------------------- ------------
| 朱迪 | 2020 年 3 月 13 日 | 回顾 |
-------------------------------------------------- ------------
| 保罗 | 2020 年 1 月 12 日 | 新 |
-------------------------------------------------- ------------

我希望它看起来像这样,它按日期排序,首先是最新日期,然后是状态 =“新”。我希望它看起来像这样:

-------------------------------------------------- ------------
| 姓名 | 创建于 | 状态 |
-------------------------------------------------- ------------
| 理查德 | 2020 年 5 月 2 日 | 新 |
-------------------------------------------------- ------------
| 詹姆斯 | 2020 年 5 月 2 日 | 新 |
-------------------------------------------------- ------------
| 查尔斯 | 2020 年 4 月 14 日 | 新 |
-------------------------------------------------- ------------
| 保罗 | 2020 年 1 月 12 日 | 新 |
-------------------------------------------------- ------------
| 克里斯汀 | 2020 年 4 月 16 日 | 拒绝 |
-------------------------------------------------- ------------
| 朱迪 | 2020 年 3 月 13 日 | 回顾 |
-------------------------------------------------- ------------

标签: phplaraveleloquent

解决方案


首先让我们看看您是否需要使用orderBy()sortByDesc()

sortBy() / sortByDesc()

从数据库中获取结果后对数据进行排序的方法sortBy()和用途。sortByDesc()

orderBy()

方法orderBySQL ORDER BY语句。这将对数据库记录进行排序,然后输出结果。


回答

在这里你需要使用orderBy()而不是sortByDesc(). 这几乎是一个重复的问题,请在此处找到原始问题。

// Make sure column names are correct
$inquiries = Inquiry::orderBy('status', 'ASC')
    ->orderBy('created_at', 'DESC')
    ->get();


推荐阅读