Я создаю базовую систему личных сообщений в Laravel и хочу отобразить список потоков сообщений между двумя пользователями (для пользователя, вошедшего в систему) в качестве базовой папки входящих сообщений.
На данный момент все сообщения хранятся в 1 таблице.Таблица содержит «sender_id» и «receient_id», а также содержимое сообщения.
Чтобы получить список сообщений для отображения в папке входящих сообщений, я сейчас делаю это в контроллере:
//Authenticate the user
$user = auth()->user()->id;
$messagesSent = Message::where('sender_id', $user)->get();
$messagesReceived = Message::where('recipient_id', $user)->get();
$messageThreads = $messagesReceived->merge($messagesSent);
В блейде, чтобы отобразить список потоков, которые я делаю:
<ul class="list-group">
@foreach ($messageThreads as $message)
@if($message->user->id != $user)
<li class="list-group-item"><a href="/messages/view/{{$message->user->id}}">{{$message->user->displayName}}</a></li>
@else
<li class="list-group-item"><a href="/messages/view/{{$message->recipient->id}}">{{$message->recipient->displayName}}</a></li>
@endif
@endforeach
</ul>
Как и ожидалось, это просто отображает имена пользователей, от которых пользователь отправил сообщения или получил сообщения, а также ссылку на поток, но если у пользователя было несколько сообщений друг от друга,их имя будет отображаться несколько раз.
Пример того, как в данный момент выводится
- Пользователь 1 Тема
- Пользователь 1 Тема
- Пользовательская тема 1
- Пользовательская тема 2
- Пользовательская тема 2
- Пользовательская тема 3
- Пользовательская тема 3
Как это должно выводить:
- Пользователь 1 Тема
- Пользователь 2 Тема
- Пользователь 3 Тема
Я хочу убедиться, что имя и ссылка на тему указаны только один раз.
Я попытался использовать Different () и Unique (), однако, поскольку sender_id & receient_id - это отдельные столбцы, я все еще получаю повторяющиеся результаты.
Как бы я смог это преодолеть.
Спасибо