@Djonson86
Нечем похвастаться.

Как осортировать посты юзера по дате создания?

Добрый день. Выбираю посты одного юзера по его id. Оно их сортирует в таком порядке как в базе данных. А мне надо сортировать по created_at, чтоб последные были первыми. Пробовал orderBy('created_at', 'desc'), оно пишет что такого метода нет. На методы sortBy('created_at') и sortByDesc('created_at') ничто не ругается, то и ничего они не меняют. Как это сделать? Метод где это делается примерно такой:

public function getPostsById($id)
	{
		$model = Post::findOrFail($id);
		$response = $model->posts;
		return response()->json($response);
	}
  • Вопрос задан
  • 222 просмотра
Решения вопроса 1
Lyrium
@Lyrium
Web developer
Вам нужно получить посты одного юзера
$user = User::find($id);
$posts = $user->posts; // Если есть связь от одного пользователя.

return response()->json($posts->sortByDesc('created_at')); // и вызвать сортировку коллекции.


Плюс нужно понимать различия:
1) orderBy это сортировка в QueryBuilder, в SQL грубо говоря Прочесть тут. Поэтому в вашем случае писало что нет такого метода ибо у коллекции вызывали его.

как вариант с orderBy
$posts = Post::where('user_id', '=', $user_id)
->orderBy('created_at', 'desc')
->get();

return response()->json($posts);


2) А sortBy / sortByDesc сортируют готовую коллекцию Почитать тут (пример выше).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@jazzus
$user->posts - коллекция
$user->posts() - запрос
запрос с сортировкой:
$user->posts()
     ->latest()
     ->get();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы