Laravel 5.1 - 合并 Eloquent 集合并排序

4
我已经合并了两个 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列的降序排列?
2个回答

6

要按降序排列,请使用 sortByDesc

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

要按升序排序,请使用sortBy

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

1

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

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

如果您只关心键,我强烈建议反转获取语句、对值进行排序并按排序顺序提取键。
$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();

我不知道你的模型设置方式,但你可能可以使用Eloquent中的with()一次性查询到工作和竞标。
$data = $this->user->find($userId)->with('jobs','bids').. //etc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接