laravel - 获取结果后如何对 Eloquent 集合进行排序?
问题描述
在我的控制器中,我有这个查询
$query = Market::whereHas('cities', function($query) use ($city) {
$query->where('id', $city);
})->get();
然后我想对这个集合进行一些操作并从主对象中删除我的子查询
$return['highlighted'] = $markets->where('highlighted', true);
$markets = $markets->diff($return['highlighted']);
问题是当我尝试对其进行排序时created_at
$return['latest'] = $markets->sortByDesc('created_at')->take(4);
$markets = $markets->diff($return['latest']);
它只是不起作用,按 id 顺序返回前 4 个对象,我尝试created_at
在回调函数中解析Carbon::parse()
,strtotime
但没有结果。
我不惜一切代价避免进行 2 个不同的数据库查询,因为原始数据库$markets
具有我需要的所有数据。
有什么建议吗?谢谢
解决方案
我认为您的问题是您尝试一次性进行排序和接收,并且在尝试访问集合的值时还遗漏了一件小事。
尝试以下方法:
$return['latest'] = $markets->sortByDesc('created_at');
$markets = $markets->diff($return['latest']->values()->take(4));
或者您可能需要这样做:
$return['latest'] = $markets->sortByDesc('created_at');
$return['latest'] = $return['latest']->values()->take(4);
$markets = $markets->diff($return['latest']->all());
推荐阅读
- javascript - 什么都没有时填充表格行
- html - 如何使用免费域和 microsoft expression web 4 创建网站
- javascript - 如何遍历 SQL 数据并使用 ChartJS 绘制图形?
- javascript - jQuery最接近()获取具有特定类或ID的行
- java - 仅使用递归将数字从 1 设置为所选数字
- android - 我应该怎么做才能使 webview 调整内容中的图像大小以适应移动屏幕
- javascript - JS - 如何在 OnePage 上使用 sessionStorage?
- python-3.x - How to plot a different candlestick graph on the same figure?
- css - 不完全确定我应该在 Vue SPA 中的哪里编写 CSS
- javascript - 角度激活路由参数类型错误:无法读取未定义的属性“id”