获取结果后如何对Eloquent集合进行排序?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取结果后如何对Eloquent集合进行排序?相关的知识,希望对你有一定的参考价值。

在我的控制器中,我有以下查询

$query = Market::whereHas('cities', function($query) use ($city) 
    $query->where('id', $city);
)->get();

然后,我想对这个集合进行一些操作,并从主对象中删除我的子querys

$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 而没有结果。

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

以上是关于获取结果后如何对Eloquent集合进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Eloquent 对分组结果排序?

如何更改 Eloquent 集合中结果的顺序?

Laravel Eloquent:all() 的排序结果

如何在 Laravel 中使用 Eloquent 对 NULL 值进行最后排序

按 created_at 排序 Eloquent 集合

你如何告诉 Mongo 在限制结果之前对集合进行排序?