php - 在 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();
不敢相信我错过了。感谢那些回复并尝试帮助我的用户。
推荐阅读
- android - Android(Kotlin)中的父/子复选框(2级嵌套)
- c++ - Use boost::odeint with class for vectors without resizing vectors
- javascript - chaining methods inside *ngIf
- jasmine - 如何在非角度页面上识别 Protractor 中的元素?
- phpstorm - PhpStorm: How to order html tag attributes?
- vba - 如何通过 VBA 在 excel 单元格中返回 SAP 错误消息?
- java - JOOQ 和 Oracle REF CURSOR 流式传输
- postgresql - PostgreSQL:如何为具有大量插入和删除的时间序列设计数据库模式
- css - nginx 不提供 css/js 图像
- laravel - Laravel 在哪里有上一次记录