Laravel 5.1 -排序合并的雄辩集合


Laravel 5.1 - Sorting merged Eloquent Collections

我合并了两个Eloquent集合,产生了以下输出:

[
    "2015-03-05 21:54:19" => 100
    "2015-07-05 18:54:00" => 4
    "2015-06-30 21:53:29" => 3
]

第一列是updated_at时间戳,最后一列是两个表的id。

我的代码如下:
$jobs = $this->user->find($userId)->jobs()->lists('id', 'updated_at');
$bids = $this->user->find($userId)->bids()->lists('id', 'updated_at');
$all = $jobs->merge($bids)->sortByDesc('updated_at');
dd($all);

我的问题是,我如何对数组排序,使它们按updated_at列降序排序?

按降序使用sortByDesc

$all = $jobs->merge($bids)->sortByDesc('updated_at');

升序使用sortBy

$all = $jobs->merge($bids)->sortBy('updated_at');

Collections有一个叫做flip()的方法,顾名思义,它用值翻转键。在这种情况下,您可以简单地在合并后翻转并按值排序,然后再次翻转以获得原始集合。

$all = $jobs->merge($bids)->flip()->sortByDesc('')->flip();

如果你只关心键,我真的建议你只反转get语句,对值进行排序,并按顺序提取键。

$jobs = $this->user->find($userId)->jobs()->lists('updated_at', 'id');
$bids = $this->user->find($userId)->bids()->lists('updated_at', 'id');
$all = $jobs->merge($bids)->sortByDesc('')->keys();

我也不知道你是如何设置模型的,但你可能能够在一个查询中使用with()

$data = $this->user->find($userId)->with('jobs','bids').. //etc