php - 按多列对 Eloquent 集合进行排序的语法是什么?

标签 php laravel-4 eloquent

我知道在使用查询生成器时,可以使用以下命令按多列排序

...orderBy('column1')->orderBy('column2')

但现在我正在处理一个 collection目的。集合有 sortBy 方法,但我一直无法弄清楚如何让它适用于多列。凭直觉,我最初尝试使用与 orderBy 相同的语法。

sortBy('column1')->sortBy('column2)

但这显然只是按顺序应用排序,最终按第 2 列排序,忽略第 1 列。我试过了

sortBy('column1', 'column2')

但这会引发错误“asort() 期望参数 2 很长,给定字符串”。使用

sortBy('column1, column2')

不会引发错误,但排序似乎很随机,所以我真的不知道它到底做了什么。我看了the code for the sortBy method ,但不幸的是,我很难理解它是如何工作的。

最佳答案

sortBy() 采用闭包,允许您提供应用于排序比较的单个值,但您可以通过将多个属性连接在一起使其成为复合值

$posts = $posts->sortBy(function($post) {
    return sprintf('%-12s%s', $post->column1, $post->column2);
});

如果您需要对多列进行排序,您可能需要对它们进行空格填充以确保“ABC”和“DEF”出现在“AB”和“DEF”之后,因此每个列的 sprint 右填充直到列的长度(至少除了最后一列之外的所有列)

请注意,如果您可以在查询中使用 orderBy,那么集合在从数据库中检索时已准备好排序

关于php - 按多列对 Eloquent 集合进行排序的语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25451019/

相关文章:

php - Javascript:使用 javascript 检查多个复选框

php - Laravel [5.2.21] 自定义 Auth Guard 不持久

Laravel 4 - 无法检索一对多关系中的数据

laravel 5.6 fill() 尝试使用不存在的 'id' 字段更新表

laravel-4 - Laravel Eloquent hasManyThrough 关系,SELECT 没有

php - Laravel - Eloquent Update 1 比它说的要少?

php - 一年中的每个月?

javascript - .ajax jquery 不适用于数组大小 $_files

php - laravel4 数据未插入单个字段

php - 拉维尔 : saving date to MySQL