Laravel私信系统问题:无法展示用户间收发双方消息
解决Laravel私信系统只显示发送消息的问题
嘿,我明白你的问题啦!你当前的查询只筛选了当前用户作为发件人的消息,所以自然看不到对方发给你的内容。咱们只需要调整查询条件,把双方之间的所有消息都捞出来就行~
修改控制器查询逻辑
你需要修改MessageController.php里的viewMessage方法,让查询同时包含两种情况:
- 当前用户是发件人,对方是收件人
- 当前用户是收件人,对方是发件人
这里要注意用闭包分组条件,避免逻辑混乱:
public function viewMessage($recipient_id){ $currentUserId = auth()->user()->id; // 获取双方之间的所有消息 $messages = Message::where(function($query) use ($currentUserId, $recipient_id) { // 我发给对方的消息 $query->where('sender_id', $currentUserId) ->where('recipient_id', $recipient_id); })->orWhere(function($query) use ($currentUserId, $recipient_id) { // 对方发给我的消息 $query->where('sender_id', $recipient_id) ->where('recipient_id', $currentUserId); }) ->orderBy('created_at', 'asc') // 按时间正序排列,旧消息在前 ->get(); return view ('pages.messages.view', compact('currentUserId', 'messages')); }
优化视图展示(可选)
为了让界面更友好,你可以在Blade视图里区分自己发送和接收的消息,方便做样式区分:
<ul> @foreach ($messages as $message) <li class="{{ $message->sender_id == $currentUserId ? 'sent' : 'received' }}"> {{ $message->body }} </li> @endforeach </ul>
之后你就可以用CSS给.sent和.received设置不同的样式,比如:
.sent { text-align: right; background-color: #dcf8c6; margin-left: 20%; } .received { text-align: left; background-color: #ffffff; margin-right: 20%; }
这样你的私信页面就能完整展示双方的所有消息啦!
内容的提问来源于stack exchange,提问作者Gazz
相关产品推荐
相关产品推荐

