Laravel: заказать колонку с коллекциями


Мне нужно заказать колонку с коллекцией.

Мне нужно orderBy(updated_at, 'desc') все записи, которые принадлежат текущему зарегистрированному пользователю.

Вот мой код:

$posts = auth()->user()->posts->sortByDesc('updated_at');

Вот модель пользователя:

class User extends Authenticatable
{
    public function posts()
    {
      return $this->hasMany(Post::class);
    }
}

Он не возвращает никаких ошибок и не сортирует !

Любая помощь была бы очень признательна.

P. S:

Я знаю, что могу достичь этого с помощью:

$posts = Post::where('user_id', auth()->user()->id)->orderBy('updated_at', 'desc')->get();
Но я хотел бы сделать то же самое с коллекциями.
3 4

3 ответа:

Итак, вот как вы сортируете с помощью SQL:

$posts = auth()->user()->posts()->orderBy('updated_at', 'DESC');

И с коллекциями:

$posts = auth()->user()->posts->sortByDesc('updated_at');

Я протестировал 2-й, и он работает так, как мне предназначено.

@devk прав. То, что я написал в первом посте, верно.

Проблема была вDataTables в представлении.

Нужно было добавить эту строку в опции Datatables:

"order": [[ 5, 'desc' ]], // 5 is the `updated_at` column (the fifth column in my case)

Так что это работает нормально:

$posts = auth()->user()->posts->sortByDesc('updated_at');

Попробуйте добавить следующее в вашу пользовательскую модель

public function posts_sortedByDesc(){
      return $this->hasMany(Post::class)->sortByDesc('updated_at');
   }

Затем получите сообщения, вызвав posts_sortedByDesc вместо posts