使用数据透视表

时间:2016-10-11 22:50:06

标签: mysql laravel pivot

我有以下表格:

用户 - ID,用户名等。
对话 - id,私有等。
conversation_user - id,user_id,conversation_id

每个打开/启动对话的 conversation_user 表中有两条记录(如果对话是多用户,可能会更多)。 一个用户作为收件人/收件人,另一个用户作为发件人。假设: user_id = 1 conversation_id = 1 user_id = 2 conversation_id = 1

如何选择我与之打开对话的所有用户/用户名。确切地说,所有参与者。

我认为我需要获得一个会话ID,我是参与者,然后对话中的其他用户进行反向查找。但到目前为止没有运气......这种反向查找是我被卡住的地方。 我正在玩Laravel 5.3和MySQL。

1 个答案:

答案 0 :(得分:0)

首先,您需要在数据透视表has_started_conversation上使用conversation_user种布尔值。

docs所述,您需要定义ConversationUser模型之间的关系。

用户

class User extends Model
{
    public function conversations()
    {
        return $this->belongsToMany('App\Conversation')->withPivot('has_started_conversation');
    }
}

会话

class Conversation extends Model
    {
        public function users()
        {
            return $this->belongsToMany('App\User')->withPivot('has_started_conversation');
        }
    }

然后

//  get a users conversations
$conversations = \App\User::first()->conversations;
// select a single conversation, or maybe multiple with a for loop?
$important_conversation = $conversations->random();
// get the participants of that conversation
$participants = $important_conversation->users;