#php #mysql #laravel
#php #mysql #laravel
Вопрос:
$thread = Thread::with(['messages' => function($q) {
$q->with('detail_per_user');
$q->with('post');
$q->with(['forum' => function($sq) {
$sq->with(['forum_messages' => function($isq) {
$isq->orderBy('id', 'ASC');
}]);
}]);
$q->with('attachments');
$q->orderBy('id', 'ASC');
$q->latest();
$q->take(20);
}])->with('users.user_details:id,avtar,name,parent_id,generated_id')->where('id', '=', $thread_id)->get()->toArray();
ASc и DSC не работают в latest. мне нужно получить последние 20 сообщений в порядке возрастания. результат приходит в порядке убывания.
Комментарии:
1. Используйте
oldest()
вместоlatest()
Ответ №1:
В Laravel latest()
orderByDesc('created_at')
и orderBy('created_at', 'desc')
эквивалентны, и они будут извлекать данные по descending
порядку.
latest()
столбец по умолчаниюcreated_at
и направление по умолчаниюdescending
$thread = Thread::with(['messages' => function($q) {
$q->with('detail_per_user');
$q->with('post');
$q->with(['forum' => function($sq) {
$sq->with(['forum_messages' => function($isq) {
$isq->orderBy('id', 'ASC');
}]);
}]);
$q->with('attachments');
$q->latest('id');
$q->take(20);
}])->with('users.user_details:id,avtar,name,parent_id,generated_id')->where('id', '=', $thread_id)->get()->sortBy('id')->toArray();
Сначала мы сортируем messages
id
по descending
порядку, затем берем 20 записей, затем collection
id
сортируем по ascending
порядку.
Возможно, вам потребуется добавить ->values()
after sortBy('id')
, так как ключ записи будет переупорядочен.