Laravel BelongsToMany表关系

时间:2014-12-24 09:49:03

标签: laravel orm eloquent

我有一个问题,我无法通过文档解决自己。

我想在两个用户之间创建一个非常简单的对话系统。

我有3个模型和表格:

用户
id,name

会话
id

消息
id,user_id,conversation_id,content

所以一条消息属于一个用户和一个对话,但我希望这个对话属于个人用户。

而且我不知道如何使用表格。如果我在对话表中创建user_id字段,则我无法拥有多个用户......

2 个答案:

答案 0 :(得分:0)

This is definitely in the documentation

反正。你正在寻找多对多的关系。为此,您需要一个包含用户ID和对话ID的数据透视表(或联结表)。

根据Laravel惯例,此表格将被称为conversation_user,并且列id(主键),conversation_iduser_id

如果你有,你可以像这样定义关系:

用户

public function conversations(){
   return $this->belongsToMany('Conversation');
}

会话

public function users(){
   return $this->belongsToMany('User');
}

查询关系

$user = User::find(1);
$conversations = $user->conversations;

如记录here所示,您可以使用attach()

将模型插入多对多关系
$conversation = new Conversation;
$conversation->users()->attach($idUser1);
$conversation->users()->attach($idUser2);

// or just pass an array of ids

$conversation->users()->attach(array($idUser1, $idUser2));

答案 1 :(得分:0)

我首先要有三个folowig表:

用户

id,name

<强> Conversation_user

user_id,message_id

<强>消息

id,content

比让我们照顾好这些关系。

在您的用户模型中:

public function conversations()
{
    return $this->belongsToMany(Message::class,'conversation_user','user_id','message_id');
}

在消息模型中:

public function users()
{
    return $this->belongsToMany(User::class,'conversation_user','message_id','user_id');
}

现在你可以像这样调用这种关系:

$user = Auth::user();
$user->conversations();