Orderby Desc в Eloquent, Laravel - PullRequest
       43

Orderby Desc в Eloquent, Laravel

0 голосов
/ 25 октября 2018

У меня есть запрос 3 таблицы объединены вместе, я хочу упорядочить результаты в порядке убывания от made_at в таблице сообщений, пожалуйста, помогите.Спасибо.

контроллер:

 return new AllChats(Chat::latest('created_at')->whereHas('messages')->with(['messages.users', 'users' =>
        function ($query) {
            $query->where('id', '!=', Auth::id());
        }])->whereHas('users', function ($query) {
            $query->where('id', '=', Auth::id());
        })->get());

Отображение результатов в порядке убывания, но из messages.created_at ??

Ответы [ 3 ]

0 голосов
/ 25 октября 2018

Вам нужно просто добавить -> orderBy в ваше , созданное в поле в вашем запросе.

return new AllChats(Chat::latest('created_at')->whereHas('messages')->with(['messages.users', 
    'users' => function ($query) {
        $query->where('id', '!=', Auth::id());
    }])
    ->orderBy('created_at', 'desc')
    ->whereHas('users', function ($query) {
        $query->where('id', '=', Auth::id());
    })->get());

Sample Example

Ссылка: https://laravel.com/docs/5.7/eloquent

0 голосов
/ 27 октября 2018

Вы можете использовать модифицированный withCount():

$chats = Chat::withCount(['messages as latest_message' => function($query) {
        $query->select(DB::raw('max(created_at)'));
    }])
    ->orderByDesc('latest_message')
    [...]
    ->get();
0 голосов
/ 25 октября 2018

используйте вот так

return new AllChats(Chat::latest('created_at')>>whereHas('messages',function($q){
    $q->orderBy('created_at', 'desc');
 })->with(['messages.users', 'users' =>
    function ($query) {
        $query->where('id', '!=', Auth::id());
    }])->whereHas('users', function ($query) {
        $query->where('id', '=', Auth::id());
    })->get());
...