显示两个用户之间的消息.拉拉维尔


Display messages between two users. Laravel

我需要显示两个用户之间的消息。我创建了表conversations,它有con_iduser_idfriend_id字段。我不知道如何编写逻辑,以便只显示在这两个用户之间编写的消息,即user_idfriend_id字段中的消息。

存储消息:

public function store(Request $request, $id)
{
    $conv = new Conversation();
    $conv->user_id = Auth::user()->id;
    $friend = User::where('id', $id)->first();
    $conv->friend_id = $friend->id;
    $conv->message = $request->input('message');
    $conv->save();
}

获取消息,其中Auth-user是发送方(user_id(,receiver是friend_id,反之亦然。按时间排序(假设您有created_at列(。

$sent_by_me = DB::table('conversations')
->select('message', 'user_id as sender_user_id', 'friend_id as receiver_user_id')
->where('user_id', Auth::user()->id)
->where('friend_id', $friend_id);
// messages sent to me by friend
$conversation = DB::table('conversations')
->select('message', 'user_id as sender_user_id' 'friend_id as receiver_user_id')
->where('user_id', $friend_id)
->where('friend_id', Auth::user()->id)
->union($sent_by_me)
->orderBy('created_at', 'asc')
->get(); 
return View::make('show.conversation')
     ->with('conversation', $conversation);

在blade中,如果sender_user_id与Auth::user((->id不同,那么您就是接收方,否则您就是发送方。使用一行if来确定消息的css样式。注意:在使用Auth::user((->id之前,您必须检查用户是否已登录,否则如果用户未登录,则会失败。在这种情况下使用中间件即可。

@forelse($conversation as $msg)
    <div id="message_{{ $msg->id }}" class="{{ $msg->sender_user_id === Auth::user()->id ? 'sent_message' : 'received_message' }}"> {{ $msg->message }} </div>
@empty
    No messages!
@endforelse