Laravel 获取结果后如何对有说服力的集合进行排序?

Laravel 获取结果后如何对有说服力的集合进行排序?,laravel,eloquent,Laravel,Eloquent,在我的控制器中,我有这个查询 $query = Market::whereHas('cities', function($query) use ($city) { $query->where('id', $city); })->get(); 然后我想对这个集合进行一些操作,并从主对象中删除我的子查询 $return['highlighted'] = $markets->where('highlighted', true); $markets = $markets-&g

在我的控制器中,我有这个查询

$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\u对其进行排序时

$return['latest'] = $markets->sortByDesc('created_at')->take(4);
$markets = $markets->diff($return['latest']);
它就是不起作用,一直按id返回前4个对象的顺序,我尝试用
Carbon::parse()
strotime
在回调函数中解析
created\u,但没有结果

我不惜一切代价避免进行两次不同的数据库查询,因为原始的
$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());

我认为您的问题在于,您试图一次完成排序和接收,但在尝试访问集合的值时,却遗漏了一件小事

尝试以下方法:

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

我犯了一个巨大的错误,我最初的方法是有效的,但我的JSON格式化程序插件打乱了集合的真实顺序,谢谢@pr1nc3我的错误,我最初的方法是有效的,但我的JSON格式化程序插件打乱了集合的真实顺序,谢谢@pr1nc3