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



尝试先按最新日期排序,然后按状态排序。状态可以是(New、In Review、Declined、Closed(,状态是数据库中的枚举字段。

我试过好几次都没有成功。这是我得到的最接近此代码的代码。我是拉拉维尔的新手,所以不知道该怎么做。

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

这就产生了:

--------------------------------------------------------------|名称|创建时间|状态|--------------------------------------------------------------|Richard | 2020年2月5日|新增|--------------------------------------------------------------|James | 2020年2月5日|新增|--------------------------------------------------------------|Christine | 2020年4月16日|拒绝|--------------------------------------------------------------|Charles | 2020年4月14日|新增|--------------------------------------------------------------|Judy | 2020年3月13日|评论中|--------------------------------------------------------------|Paul | 2020年12月1日|新增|--------------------------------------------------------------

我希望它看起来像这样,按日期排序,首先是最新的日期,然后是status="New"。我希望它看起来像这样:

--------------------------------------------------------------|名称|创建时间|状态|--------------------------------------------------------------|Richard | 2020年2月5日|新增|--------------------------------------------------------------|James | 2020年2月5日|新增|--------------------------------------------------------------|Charles | 2020年4月14日|新增|--------------------------------------------------------------|Paul | 2020年12月1日|新增|--------------------------------------------------------------|Christine | 2020年4月16日|拒绝|--------------------------------------------------------------|Judy | 2020年3月13日|评论中|--------------------------------------------------------------

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

sortByDes((/

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

orderBy((

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


回答

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

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

您可以将函数传递给集合上的sortBy函数,从而指定应使用哪个值进行排序。通过这种方式,您还可以组合两个值进行排序。

Inquiry::all()->sortBy(function ($inquiry) {
return sprintf('%s%s', $inquiry->created_at, $inquiry->status);      
})->values();

您可以在此处阅读更多信息:https://laravel.com/docs/collections#method-分拣

最新更新