对 Laravel/Lumen Eloquent 中的折叠集合进行排序

Sorting collapsed collections in 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,
        ...
    },

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

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

我所缺少的只是下面一行:

$records = $collapsed->all();

应该是:

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

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