获取结果后如何对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集合进行排序?的主要内容,如果未能解决你的问题,请参考以下文章