首页 > 解决方案 > 在 Laravel/Lumen Eloquent 中对折叠的集合进行排序

问题描述

我正在尝试从 3 个不同的查询中折叠(连接在一起)Laravel 集合,然后按相同的键“recordTime”对它们进行排序。因为每个查询都访问不同的表,所以我不确定是否有办法像常规查询一样使用 orderBy。到目前为止,这是我的代码:

 $books = $targetItem->books()->whereBetween('recordTime', [$from, $to])->get();
 $magazines = $targetItem->magazines()->whereBetween('recordTime', [$from, $to])->get();
 $articles = $targetItem->articles()->whereBetween('recordTime', [$from, $to])->get();

 $collection = collect([$books, $magazines, $articles]);
 $collapsed = $collection->collapse();
 //$collapsed = $collapsed->sortBy("recordID");
 $records = $collapsed->all();

$targetItem 是一个与每本书、杂志和文章都有 hasMany 关系的模型。

我似乎成功地折叠了集合,从而产生了一组对象。但是,当我尝试使用sortBy函数(上面已注释掉)时,它以对象为目标,而不是对象中的键。

对不起,如果我使用了错误的术语,但我基本上需要它向下排序。

提前致谢!

编辑 没有 sortBy 行的输出

"data": [
    {
        "recordID": 1,
        ...
    },
    {
        "recordID": 2,
        ...
    },

使用 sortBy 行输出

"data": {
    "0": {
        "recordID": 1,
        ...
    },
    "1": {
        "recordID": 2,
        ...
    },

它似乎给每个对象一个索引,所以我假设它试图在那里排序而不是按对象包含的内容?再次感谢您的帮助。

标签: phplaravellumen

解决方案


嗬!经过数小时的尝试,通过简单的修复解决了我自己的问题。

我所缺少的是以下行:

$records = $collapsed->all();

本来应该:

$records = $collapsed->values()->all();

不敢相信我错过了。感谢那些回复并尝试帮助我的用户。


推荐阅读