【发布时间】:2015-02-22 10:50:50
【问题描述】:
我有一个问题,我无法通过文档自行解决。
我想在两个用户之间创建一个非常简单的对话系统。
我有 3 个模型和表格:
用户
身份证、姓名
对话
身份证
留言
id , user_id , conversation_id , 内容
所以一条消息属于一个用户和一个对话,但我希望对话属于多个用户。
而且我不知道如何用桌子制作这个。如果我在对话表中创建一个user_id 字段,我就不能有多个用户......
【问题讨论】:
我有一个问题,我无法通过文档自行解决。
我想在两个用户之间创建一个非常简单的对话系统。
我有 3 个模型和表格:
用户
身份证、姓名
对话
身份证
留言
id , user_id , conversation_id , 内容
所以一条消息属于一个用户和一个对话,但我希望对话属于多个用户。
而且我不知道如何用桌子制作这个。如果我在对话表中创建一个user_id 字段,我就不能有多个用户......
【问题讨论】:
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));
【讨论】:
我首先要有三个 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();
【讨论】: