对 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();
真不敢相信我错过了。感谢那些响应并尝试帮助我的用户。
我正在尝试折叠(连接在一起)来自 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();
真不敢相信我错过了。感谢那些响应并尝试帮助我的用户。