2016-12-30 7 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

Я предлагаю вам «СОЮЗ» все ваши запросы, а не объединять эти 3 массива в php. 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 ('journalals', 'posts.pratic_id' , '=', 'journals.id') -> join ('users', 'posts.user_id', '=', 'users.id') -> где ('journalals.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().

 Смежные вопросы

  • Нет связанных вопросов^_^