I am building a basic private messaging system in Laravel and want to display a list of message threads between 2 users (to the user who is logged in) as a basic inbox.
At the moment I have all messages stored in 1 table. The table contains the "sender_id" and the "recipient_id" as well as the message contents.
To retrieve the list of messages to display in the inbox, I am currently doing this in the controller:
//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);
In the blade, to display the list of threads I am doing:
<ul class="list-group">
@foreach ($messageThreads as $message)
@if($message->user->id != $user)
<li class="list-group-item"><a href="/messages/view/"></a></li>
@else
<li class="list-group-item"><a href="/messages/view/"></a></li>
@endif
@endforeach
</ul>
As expected, this is just displaying the names of the users which the user has messaged or received messages from as well as a link to the thread but if the user has had multiple messages between each other, their name will obviously display multiple times.
Example of how its currently outputting
- User 1 Thread
- User 1 Thread
- User 1 Thread
- User 2 Thread
- User 2 Thread
- User 3 Thread
- User 3 Thread
How it should output:
- User 1 Thread
- User 2 Thread
- User 3 Thread
I want to be able to make sure the name & link to the thread is only listed once.
I have tried using distinct() and unique() however because the sender_id & recipient_id are seperate columns, i still get duplicate results.
How would I able to overcome this.
Thanks
via Chebli Mohamed
Aucun commentaire:
Enregistrer un commentaire