Laravel 4如何合并数据库表并通过created_at对它们进行排序?

时间:2015-05-08 11:31:43

标签: php mysql laravel laravel-4

我想将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);

}

1 个答案:

答案 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