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