Laravel 6.0 Eloquent - 按日期和状态排序

Fly*_*Moe 6 php laravel eloquent

尝试先按最新日期订购我的桌子,然后按状态订购。状态可以是(新建、审核中、拒绝、已关闭),状态是数据库中的枚举字段。

我尝试了几件事但没有成功。这是我用这段代码得到的最接近的结果。我是 Laravel 新手,所以不知道该怎么做。

$inquiries = Inquiry::all()->sortByDesc('created_at')->sortByDesc('Status')->values();
Run Code Online (Sandbox Code Playgroud)

这会产生这样的结果:

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

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

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

Ban*_*mar 11

首先,让我们看看是否需要使用orderBy()or sortBy()。

排序依据() /排序依据描述()

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

orderBy()

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


回答

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

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

Run Code Online (Sandbox Code Playgroud)