Как использовать ASC и DESC в latest() в laravel

#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') , так как ключ записи будет переупорядочен.