0

我有 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();
4

1 回答 1

0

您需要方法中的条件user_one == auth()->user()->idOR 。user_two == auth()->user()->idjoin()

$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();
于 2019-08-19T14:50:51.853 回答