选择用户而不是用户的对话

时间:2014-12-24 13:56:04

标签: sql laravel

我有一个像

这样的数据库
User
  UserName
  UserId

Chat
  ChatId
  ChatSubject

ChatUser
  Chat_ChatId
  User_UserId

ChatMessage
  Chat_ChatId
  User_UserId
  Message

我在一个变量中有当前用户ID:$ userId

我想要的是在Chat_ChatSubject中找到聊天中其他人的UserName,这样我就可以创建一个会话列表,其中我显示了其他人的用户名和主题

我有什么:

$conversations= Chat::
        Join('ChatUser', 'Chat.id', '=', 'ChatUser.User_UserId')
        ->Join('User', 'User.UserId', '=', 'ChatUser.User_UserId')
        ->Select('Users.UserName', 'Chat.Subject')
        ->OrderBy('ChatUsers.Chat_ChatId','asc')
        ->GroupBy('Chat.ChatId')
        ->get();

这是一个聊天列表,但它并不总是包含另一个人的名字。我想要的是User.UserName是另一个人的用户名,而不是我自己的用户名。

(一次聊天中总有2个ChatUser

1 个答案:

答案 0 :(得分:0)

假设您已在模型中设置关系......

$conversations = User::find($userId)
                    ->chats()
                    ->with(array('users' => function($query) use ($userId){
                        $query->where('id', '!=', $id);
                    }))->get();

foreach($conversations as $conversation){
    $conversation->ChatSubject; // get subject
    $conversation->users; // get users collection (current user excluded)
}