заказать с нетерпением загрузки, laravel - PullRequest
0 голосов
/ 03 июля 2018

У меня есть таблица под названием chat, которая объединяется с пользователями и сообщениями (сообщения объединяются с пользователями), запрос работает нормально, просто я пытаюсь добавить orderby с помощью create_at (desc), но это должно быть из сообщений таблицы. помоги мне здесь. Заранее спасибо. Ниже мой запрос,

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

1 Ответ

0 голосов
/ 05 июля 2018

Объединить JOIN с подзапросом:

$chats = Chat::select('chats.*')
    ->join('messages', 'messages.chat_id', 'chats.id')
    ->where('chats.direct_chat', 1)
    ->where('messages.id', function ($query) {
        $query->select('id')
            ->from('messages')
            ->whereColumn('chat_id', 'chats.id')
            ->latest()
            ->limit(1);
    })
    ->whereHas('users', function ($query) {
        $query->where('id', '=', Auth::id());
    })
    ->latest('messages.created_at')
    ->with(['messages.users', 'users' => function ($query) {
        $query->where('id', '!=', Auth::id());
    }])
    ->get();

Обратите внимание, что этот запрос выбирает только чаты с хотя бы одним сообщением.

...