Laravel BelongsToMany 表关系

Posted

技术标签:

【中文标题】Laravel BelongsToMany 表关系【英文标题】:Laravel BelongsToMany table relation 【发布时间】:2015-02-22 10:50:50 【问题描述】:

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

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

我有 3 个模型和表格:

用户 身份证、姓名

对话 身份证

留言 id , user_id , conversation_id , 内容

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

而且我不知道如何用桌子制作这个。如果我在对话表中创建一个user_id 字段,我就不能有多个用户......

【问题讨论】:

【参考方案1】:

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));

【讨论】:

【参考方案2】:

我首先要有三个 folowig 表:

用户

身份证、姓名

Conversation_user

user_id , message_id

留言

id , 内容

让我们处理好人际关系吧。

在您的用户模型中:

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();

【讨论】:

以上是关于Laravel BelongsToMany 表关系的主要内容,如果未能解决你的问题,请参考以下文章

Laravel belongsToMany 关系在两个表上定义本地键

Laravel:如何编写关于 belongsToMany 关系的连接计数查询?

Laravel BelongsToMany 表关系

Laravel belongsToMany 关系只有一个结果

Laravel 4 belongsToMany 关系返回空

Laravel - Eager Loading BelongsToMany 关系