我知道在使用查询生成器时,可以使用以下方法按多列排序
...orderBy('column1')->orderBy('column2')
但现在我正在处理一个收藏 http://laravel.com/docs/eloquent#collections目的。收藏有sortBy
方法,但我无法弄清楚如何使其适用于多列。直觉上,我最初尝试使用与orderBy
.
sortBy('column1')->sortBy('column2)
但这显然只是按顺序应用排序,最终按第 2 列排序,而忽略第 1 列。我试过
sortBy('column1', 'column2')
但这会引发错误“asort() 期望参数 2 很长,给定字符串”。使用
sortBy('column1, column2')
不会抛出错误,但排序似乎相当随机,所以我真的不知道它实际上是做什么的。我在看sortBy 方法的代码 http://laravel.com/api/source-class-Illuminate.Support.Collection.html#206-237,但不幸的是我很难理解它是如何工作的。
sortBy()
采用闭包,允许您提供用于排序比较的单个值,但您可以通过将多个属性连接在一起使其成为复合值
$posts = $posts->sortBy(function($post) {
return sprintf('%-12s%s', $post->column1, $post->column2);
});
如果您需要对多列进行排序,则可能需要用空格填充它们以确保“ABC”和“DEF”位于“AB”和“DEF”之后,因此为每列的冲刺右侧填充直到列的长度(至少除了最后一列之外的所有列)
请注意,如果您可以在查询中使用 orderBy,那么通常会更高效,这样集合就可以在从数据库检索时进行排序
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)