我想将4个数据库表合并在一起,而不是想通过created_at字段对所有数据进行排序。使用我的代码,所有数据仍然按数据库表分组,结果应该是我所有表数据的某种时间轴。我究竟做错了什么?它只显示4个项目......
public function showIndex()
{
$users = User::orderBy('created_at', 'desc')->get();
$projects = Project::with('votes')->orderBy('created_at', 'desc')->get();
$events = Calendar::orderBy('created_at', 'desc')->get();
$jobs = Job::orderBy('created_at', 'desc')->get();
$all = $users->merge($projects)->merge($events)->merge($jobs);
return View::make('users.index')->with('events', $all);
}
答案 0 :(得分:2)
假设唯一的问题是它没有正确的顺序,你可以简单地使用
$all->sort(function ($a, $b) {
if ($a->created_at === $b->created_at) {
return 0;
}
return $a->created_at > $b->created_at ? 1 : -1;
});
或
$all = $all->sortBy(function($result) {
return $result->created_at;
});
请参阅http://laravel.com/api/master/Illuminate/Support/Collection.html#method_sort