【问题标题】:How can I sortBy() multiple values in Laravel?如何在 Laravel 中 sortBy() 多个值?
【发布时间】:2019-02-03 16:10:07
【问题描述】:

Laravel 似乎没有提供按多个条件排序的方法。在我的例子中,我想按一个值对集合进行排序,我按升序调用 sort_order,然后按降序对日期进行排序。

$item->sortBy('sort_order')->sortByDesc('date');

这将按第一个条件排序,然后用第二个条件覆盖之前的 sortBy。

从我在laravel 中读到的内容不支持这一点。有没有其他人遇到过这个问题,如果有,您是如何解决的?

我正在使用 Laravel 5.6。

【问题讨论】:

标签: php laravel laravel-collection


【解决方案1】:

我确实通过将它们分组并再次排序然后折叠来解决这个问题:

$items->sortBy('sort_order')
      ->groupBy('sort_order')
      ->map(function ($subSet) {
          return $subSet->sortByDesc('date');
      })->collapse();

【讨论】:

    【解决方案2】:

    试试这个。

    $collection->sortBy([ ['sort_order', 'asc'], ['date', 'desc'] ])
    

    【讨论】:

    • 问题是关于对现有集合进行排序,而不是如何构建数据库查询。
    • 我的错。顺便说一句
    • @LimKeanPhang 感谢您的跟进,但开箱即用的 sortBy 方法不接受数组。这个答案旁边是否有一个自定义方法可以让它工作?
    猜你喜欢
    • 2021-12-05
    • 1970-01-01
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    • 2019-03-12
    • 2015-12-21
    • 2023-03-19
    • 2018-05-12
    相关资源
    最近更新 更多