2016-12-30 113 views
1

我有3个查询,我的问题是我想合并收集排序created_atLaravel如何排序合并收集

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

 $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

我建议你'UNION'所有的查询,而不是在php中合并这3个数组。 https://laravel.com/docs/5.3/queries#unions –

+0

这样的联合:$ posts1 = \ DB :: table('posts') - > select('posts。*','users.nom', 'pratics.titre') - > join('pratics','posts.pratic_id','=','pratics.id') - > join('users','posts.user_id','=',' users.id ') - >在哪里(' pratics.user_id”,$ id)的; $ 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) - >工会($ posts1) - >获得(); – nabil

回答

0

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

话虽这么说,具体回答你的问题,我相信你是唯一缺少的就是让您的合并阵列收集你叫sortby它之前:

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

希望这有助于!

0

如果要合并的集合,这样的使用合并()函数:

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

而且array_merge()是不可行这里。如果您想使用array_merge(),则必须在此之前使用toArray()