Laravel怎么排序合并集合

时间:2016-12-30 19:17:54

标签: php collections laravel-5 merge query-builder

我有3个查询,我的问题是我希望合并的集合按created_at排序。

如何合并和排序三个查询构建器集合?

        $posts1 =\DB::table('posts')
        ->select('posts.*', 'users.nom','pratics.titre')
        ->join('pratics', 'posts.pratic_id','=','pratics.id')
        ->join('users', 'posts.user_id','=','users.id')
        ->where('pratics.user_id',$id)
        ->orderBy('posts.id', 'desc')
        ->get();

        $posts2 =\DB::table('posts')
        ->select('posts.*', 'users.nom','pratics.titre')
        ->join('journals', 'posts.pratic_id','=','journals.id')
        ->join('users', 'posts.user_id','=','users.id')
        ->where('journals.user_id',$id)
        ->orderBy('posts.id', 'desc')
        ->get();


        $posts3 =\DB::table('posts')
        ->select('posts.*', 'users.nom','pratics.titre')
        ->join('exos', 'posts.exo_id','=','exos.id')
        ->join('users', 'posts.user_id','=','users.id')
        ->where('exos.user_id',$id)
        ->orderBy('posts.id', 'desc')
        ->get();

$posts = array_merge($posts1,$posts2, $posts3)->sortby('created_at');

2 个答案:

答案 0 :(得分:1)

我同意@Vitalii Strimbanu,这可能不是获取所有记录的最佳方式。

话虽这么说,为了特别回答你的问题,我相信你唯一缺少的就是在你调用sortby之前将你的合并数组变成集合

$posts = collect(array_merge($posts1,$posts2, $posts3))->sortby('created_at');

希望这有帮助!

答案 1 :(得分:1)

如果要合并集合,请使用如下所示的merge()函数:

$posts1->merge($posts2)->merge($posts3)->sortby('created_at');

array_merge()在这里不可行。如果您想使用array_merge(),则必须先使用toArray()