我有2个表,用于创建消息,对话和消息。如果您与新合作伙伴创建新消息,则会获得新的对话 ID,因此,如果您开始对话,您的user_id位于消息表中,并且在您正在user_one写作伙伴user_two的对话表中。但是,如果在其他地方开始了您正在user_two的对话,并且在消息表中,user_id是其他用户。
我需要你的写作伙伴的名字显示在列表中。
例:
- 马里奥/最后一条消息/-> 如果我点击,我会看到消息
- 玛丽亚/最后一条消息/-> 如果我点击,我会看到消息
保存并显示消息正在工作。我只需要从你的谈话伙伴那里读出名字。
使用我的解决方案,我得到了写作伙伴的名称,但前提是你是用户二。 问题是联接。 我需要类似 JOINNOTIN 的东西
我的桌子: 谈话
'id'
'user_one'
'user_two'
消息
'id'
'message'
'userid'
'conversationid'
我的查询:
$messages = DB::table('conversation')
->select('messages.message', 'conversation.user_one', 'conversation.user_two', 'users.name', 'users.firstname', 'messages.id', 'messages.created_at', 'conversation.id')
->join('users', 'users.id', '=', 'conversation.user_one')
->join('messages', 'messages.conversation_id', '=', 'conversation.id')
->where('messages.userid', '!=', Auth::user()->id)
->orwhere('conversation.user_one', '=', Auth::user()->id)
->orwhere('conversation.user_two', '=', Auth::user()->id)
->groupBy('messages.conversation_id')
->latest()
->get();
您需要条件user_one == auth()->user()->id
ORuser_two == auth()->user()->id
在join()
方法中。
$authId = auth()->user()->id;
$messages = DB::table('conversation')
->select('messages.message', 'conversation.user_one', 'conversation.user_two', 'users.name', 'users.firstname', 'messages.id', 'messages.created_at', 'conversation.id')
->join('users', function ($join) use ($authId) {
$join->on('id', '=', 'user_one')->orOn('id', '=', 'user_two')
->where('id', '!=', $authId);
})
->join('messages', 'messages.conversation_id', '=', 'conversation.id')
->where('messages.userid', '!=', Auth::user()->id)
->orwhere('conversation.user_one', '=', Auth::user()->id)
->orwhere('conversation.user_two', '=', Auth::user()->id)
->groupBy('messages.conversation_id')
->latest()
->get();