我有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');
答案 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()
。