Сортировка красноречивой коллекции by created_at

У меня есть таблица с именем «posts» с столбцами: «post_id int primary increments», «poster_id int» и «status text», а также массив с именами друзей с столбцами: «user_id int primary» и «friend_ids text».

Мне нужно собрать все идентификаторы в текстовом столбце друзей, который достаточно прост, используя:

$friends = explode(',', \Friend::where('user_id', \Sentry::getUser()->id)->first()->friend_ids); 

Если данные в текстовом столбце будут выглядеть как «1,2,3» и т. Д.

Затем я создаю объект Eloquent Collection, который также легко можно выполнить с помощью:

 $posts = new \Illuminate\Database\Eloquent\Collection(); 

Но проблема в том, что я не могу понять, как заполнить коллекцию и отсортировать ее содержимое столбцом «created_at» объекта Post.

Это то, что у меня есть на данный момент:

 foreach($friends as $id) { $posts_ = \Post::where('poster_id', $id)->getQuery()->orderBy('created_at', 'desc')->get(); foreach($posts_ as $post) { $posts->add($post); } } 

Я не могу понять, будет ли этот код работать или нет, чтобы сортировать весь сбор сообщений по столбцу «created_at». Мне также нужно будет легко разбивать всю коллекцию.

Каков рекомендуемый способ сортировки коллекции?

Если вы хотите отсортировать collection вы можете использовать метод sortBy помощью заданного ключа

 $sorted = $posts->sortBy('created_at'); 

Также вы можете применить функцию обратного вызова в collection

 $sorted = $posts->sortBy(function($post) { return $post->created_at; }); 

Надеюсь это поможет. Для получения дополнительной информации о collections вы можете прочитать документы

Вам не нужно перебирать массив $friends , вы можете просто использовать его вместе с whereIn как это

 $posts = \Post::whereIn('poster_id', $friends)->latest()->get(); 

Это заменяет создание пустой коллекции и foreach -loop и дает вам все ваши сообщения друзей в одной коллекции, отсортированной по created_at

( latest функция является ярлыком для orderBy('created_at', 'desc') )