Красноречивый Laravel, как мне сгруппировать по 2 столбцам в отношении - PullRequest
0 голосов
/ 11 ноября 2018

У меня есть таблица сообщений, которая выглядит следующим образом:

  • ID

  • user_id

  • target_user_id

  • сообщение

Я бы хотел сгруппировать их по разговору.

Так что некоторые типичные записи могут выглядеть так:

#1
user_id = 5
target_user_id = 10
message = hello
#2
user_id = 10
target_user_id = 5
message = hello
#3
user_id = 15
target_user_id = 20
message = hello
#2
user_id = 15
target_user_id = 20
message = hello

Чего я хотел бы добиться, так это как я могу сгруппировать все свои записи так, чтобы все сообщения между пользователем 5 и 10, например, были в группе, а 15 и 20 - в группе и сортировались по последним.

Это моя текущая попытка:

$msgs = Message::with('user')
     ->where(function($q) {
     $q->where('user_id', Auth::user()->id)
        ->orWhere('target_user_id', Auth::user()->id);
     })
     ->groupBy('user_id', 'target_user_id')
            ->get();

Это не дубликат, поскольку проблема и вопрос очень разные, и в предложенном решении есть то, что я уже пробовал выше, если вы видите это.

1 Ответ

0 голосов
/ 11 ноября 2018

Полагаю, вы можете сгруппировать их так:

$msgs = Message::with('user')
             ->where(function($q) {
             $q->where('user_id', Auth::user()->id)
                ->orWhere('target_user_id', Auth::user()->id);
             })
    ->get();

$groupedMessages = $msgs->groupBy(function ($message) {
    return min($message->user_id, $message->target_user_id) .'-'. max($message->user_id, $message->target_user_id);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...