【发布时间】:2018-01-17 20:45:59
【问题描述】:
Laravel 的 Collection 类 (v5.5) 有一个 sortBy() 方法,可以对所有内容进行排序,类似于使用 SQL ORDER BY 语句,除了有一个显着的区别:关系数据库将把 NULL升序排序时将值放在末尾(或至少 PostgreSQL 会),但 Laravel 的 sortBy() 方法将 NULL 值放在首位。
那么当使用Collection::sortBy() 方法时,如何让那些NULL 值排在最后而不是排在最前面呢? 请注意:我无法更改数据库查询本身!我唯一的选择是在 PHP 中对集合本身进行排序。在我的情况下,我绝对不能在数据库级别执行此操作。
有一个similar question on Stack Overflow here,但 OP 找到的解决方案有点像 hack,在我的情况下不起作用,因为我需要它来为 varchars 工作。
注意:我意识到sortBy() 接受一个闭包作为第一个参数,但有zero explanation in the documentation 关于这个闭包接收的参数(哪个“关键”是$key?),也没有明确说明闭包是什么应该返回以确定排序顺序。 (我假设它应该返回一个表示订单的整数,但我不知道如何使用多个 NULL 值使它为我工作。)
【问题讨论】:
-
请出示真实数据样本,以便我们为您找到可行的解决方案。
标签: laravel sorting laravel-5 laravel-5.5 laravel-collection