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_id
和 user_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 关系的连接计数查询?