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

Php 在Laravel/Lumen中对折叠的集合进行排序,php,laravel,lumen,Php,Laravel,Lumen,我试图从3个不同的查询中折叠(连接在一起)Laravel集合,然后用同一个键“recordTime”对它们进行排序。 因为每个查询都访问不同的表,所以我不确定是否有方法像常规查询一样使用orderBy。 以下是我目前的代码: $books = $targetItem->books()->whereBetween('recordTime', [$from, $to])->get(); $magazines = $targetItem->magazines()->w

我试图从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是一个与每本书、杂志和文章都有许多关系的模型

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

抱歉,如果我使用了错误的术语,但我基本上需要它按一个级别进行排序

提前谢谢

编辑 不带sortBy行的输出

"data": [
    {
        "recordID": 1,
        ...
    },
    {
        "recordID": 2,
        ...
    },
"data": {
    "0": {
        "recordID": 1,
        ...
    },
    "1": {
        "recordID": 2,
        ...
    },
用sortBy行输出

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

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

Doh!经过几个小时的尝试,我用一个简单的方法解决了自己的问题

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

$records = $collapsed->all();
应该是:

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

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

不能在本地复制。有多个不同的模型然后崩溃仍然允许sortBy按模型属性排序。你说的“它以对象为目标”是什么意思?@Devon我也会这么想,我想我只是在做错事@JonasStaudenmeir我编辑了原始问题,希望能帮助你理解我的意思,对此表示抱歉。你能发布
dd($collapsed)的结果吗排序前后?