Laravel: orderBy столбец с коллекциями

Мне нужно упорядочить столбец с коллекцией.

Мне нужно 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();

Но я хотел бы сделать то же самое с коллекциями.

Ответ 1

Так вот как вы сортируете с 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 sixth column in my case)

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

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

Ответ 3

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

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

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