2016-12-30 9 views
1

쿼리가 3 개 있습니다. 병합 된 컬렉션을 created_at으로 정렬해야합니다.Laravel 병합 병합 방법

세 가지 쿼리 빌더 모음을 병합하고 정렬하는 방법은 무엇입니까?

 $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

union for this : $ posts1 = \ DB :: table ('posts') -> select ('posts. *', 'users.nom' ('사용자', 'posts.user_id', '=', '사용자 이름', '사용자 이름', '사용자 이름', '사용자 이름', ' users.id ') -> 여기서 ('pratics.user_id ', $ id); ('posts. *', 'users.nom', 'pratics.titre') -> join ('저널', 'posts.pratic_id') -> = ','journals.id ') -> ('사용자 ','posts.user_id ','= ','users.id ') -> 여기서 ('journals.user_id ', $ id) > 노동 조합 ($ posts1) -> get(); – 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()을 사용해야합니다.