当前位置: 首页 > 知识库问答 >
问题:

Laravel 6.0雄辩-按日期和状态排序

邹山
2023-03-14

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

我试了几件事都没有成功。这是我对这个代码最接近的了。我是新来的Laravel,所以不知道如何做到这一点。

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

这就产生了:

--------------------------------------------------------------
|     Name          |      Created At    |      Status       |
--------------------------------------------------------------
|     Richard       |      05/02/2020    |       New         |
--------------------------------------------------------------
|     James         |      05/02/2020    |       New         |
--------------------------------------------------------------
|     Christine     |      04/16/2020    |      Declined     |
--------------------------------------------------------------
|     Charles       |      04/14/2020    |       New         |
--------------------------------------------------------------
|     Judy          |      03/13/2020    |      In Review    |
--------------------------------------------------------------
|     Paul          |      01/12/2020    |       New         |
--------------------------------------------------------------

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

--------------------------------------------------------------
|     Name          |      Created At    |      Status       |
--------------------------------------------------------------
|     Richard       |      05/02/2020    |       New         |
--------------------------------------------------------------
|     James         |      05/02/2020    |       New         |
--------------------------------------------------------------
|     Charles       |      04/14/2020    |       New         |
--------------------------------------------------------------
|     Paul          |      01/12/2020    |       New         |
--------------------------------------------------------------
|     Christine     |      04/16/2020    |      Declined     |
--------------------------------------------------------------
|     Judy          |      03/13/2020    |      In Review    |
--------------------------------------------------------------

共有2个答案

黄元章
2023-03-14

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

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

你可以在这里读到更多:https://laravel.com/docs/collections#method-sortby

汪翰墨
2023-03-14

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

sortBy()/sortByDesc()

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

orderBy()

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

答案

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

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

 类似资料:
  • 问题内容: 当我想在MySQL查询中定义自定义排序顺序时,可以执行以下操作: 雄辩的ORM版本是什么? 更新: 这是解决方案,在不同领域订购时也可以使用: 问题答案: 使用其中之一或直接使用应该可以:

  • 我有两种型号: 产品,它有字段 库存,具有产品标识和数量字段 我想按排序字段(ASC)获取订购的产品,但库存量等于0的产品需要位于列表的末尾。 例如。 产品介绍 股票 预期列表(产品ID)-4、1、2、3 我已经为我需要做的事情编写了SQL查询。 有没有一种方法可以使用雄辩模型的作用域来获得此类列表? 使现代化 解决方案。

  • 问题内容: 我想通过表达式从表中获取所有行: 但是,如果该列包含日期时间,可以这样说: 但是如果我这样做: 它不会排。 我猜这是因为$ date = 2014-07-10,这使MySQL假设它是2014-07-10 00:00:00。 在普通的MySQL中,我会做 使用Laravel的口才相当于什么? 问题答案: Laravel 4+为您提供这些方法:,,(#3946)和(#6879)。 他们为您

  • 我有一个模型,它的

  • 问题内容: 我想按日期订购。 例如 我已经尝试过: 伯,这是行不通的。 我得到这个代替: 你能帮我吗? 问题答案: 如果要按日期排序, 请将其存储为日期而不是字符串。 除非您的日期字符串的格式为,否则它不会按您希望的顺序排序。 数据库可以按原样进行足够的工作,而无需人们加倍努力,因此,您应该尽可能地避免我喜欢的 SQL体操。 将其存储为日期,然后(如果需要)使用日期函数以形式获取它。 这样会比您尝

  • 问题内容: 我知道这一定是相对简单的,但是我有一个JSON数据集,我想按日期排序。到目前为止,我无处不在遇到问题。现在,我将日期存储为。如果有帮助,我可以访问jquery,但是我意识到.sort()是本机JS。提前致谢。 问题答案: 假设您有一个javascript对象数组,只需使用自定义排序功能即可: Array 方法使用回调函数对数组进行排序,该回调函数传递给数组中的元素对。 如果返回值为负,