我知道在使用查询生成器时,可以使用以下命令按多列排序
...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/