当前位置: 首页 > 面试题库 >

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

符鸿光
2023-03-14
问题内容

我知道使用查询生成器时,可以使用多个列进行排序

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

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

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

但这显然只是按顺序应用排序,并且最终以column2排序,而无视column1。我试过了

sortBy('column1', 'column2')

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

sortBy('column1, column2')

不会引发错误,但是排序似乎是随机的,所以我真的不知道它的实际作用。我查看了sortBy方法的代码,但不幸的是,我很难理解它的工作方式。


问题答案:

sortBy() 进行闭包,允许您提供用于比较比较的单个值,但是您可以通过将多个属性串联在一起来使其成为一个组合

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

如果您需要对多列进行sortBy排序,则可能需要对它们进行空格填充,以确保“ ABC”和“ DEF”紧接在“ AB”和“
DEF”之后,因此对每列填充了sprint,直到列的长度为止(至少对于最后一列除外)

请注意,如果您可以在查询中使用orderBy,这样通常效率会更高,以便在从数据库中检索时对集合进行立即排序



 类似资料:
  • 数据 我在ES索引中保留了对象。其中每个字段都有一个myKey和myName字符串字段(持久化为关键字字段)。不能保证同一个myKey的myName总是相同的。E、 g.以下两个条目共享相同的myKey,但具有不同的myName值: 挑战 我需要选择并返回所有不同的myKey值,查找并显示最可能的myName(myKey上下文中出现的最多),并按myName对生成的Bucket进行排序。 到目前为

  • 问题内容: Python通过按顺序查看元组的元素来对元组列表进行排序。由于集合是无序的,Python如何对集合列表进行排序? 编辑:帖子中的问题和可接受的答案较为笼统,给出的文件也很深入。我的问题不是重复的。 问题答案: 无论列表中有什么内容,元素的方法都是唯一参考的比较方法。对于集合,意味着“是”的适当子集,不足以定义总顺序。这就是为什么结果通常是不确定的。可能是原始列表的任何排列,与实现恰好适

  • 问题内容: 我有一个Java对象列表,希望根据多个字段进行排序。 是否可以使用或接口根据多个字段对列表进行排序?我看到的所有示例仅根据一个领域进行排序。换句话说,可以按“校园”或“教师”或“建筑”进行排序。我想按“校园”,“教师”,“建筑”(因为它在SQL中存在)进行排序 问题答案: 您的比较器如下所示: 基本上,只要到目前为止已比较的属性相等(),它就会继续比较类的每个连续属性。

  • 问题内容: 我有一个清单清单: 如果要按一个元素(例如,高/短元素)排序,可以通过进行。 如果我想作为排序依据两个高大和颜色,我可以为每个元素做排序两次,一次,但有一个更快的方法? 问题答案: 键可以是返回元组的函数: 或者,你可以使用来实现相同的效果(速度更快,并且避免了Python函数调用): 并请注意,你可以在此处使用而不是使用,然后重新分配:

  • 本文向大家介绍JAVA对list集合进行排序Collections.sort(),包括了JAVA对list集合进行排序Collections.sort()的使用技巧和注意事项,需要的朋友参考一下 对一个集合中的对象进行排序,根据对象的某个指标的大小进行升序或降序排序。代码如下: 进行降序排列 进行升序排列 经过测试发现,只需要把两个对象的位置调换一下即可升序或降序。 如果指标相同,根据多个指标进行