首页 > 解决方案 > 获取结果后如何对 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具有我需要的所有数据。

有什么建议吗?谢谢

标签: laraveleloquent

解决方案


我认为您的问题是您尝试一次性进行排序和接收,并且在尝试访问集合的值时还遗漏了一件小事。

尝试以下方法:

 $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());

推荐阅读