当前位置: 首页 > 知识库问答 >
问题:

Laravel-BelongsToMany表关系

诸葛奇玮
2023-03-14

我有一个问题,我无法用文档解决。

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

我有3个模型和表:

用户id、名称

会话
id

消息
id,user_id,conversation_id,内容

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

我不知道怎么用桌子做这个。如果我在对话表中创建一个user\u id字段,我不能有多个用户。。。

共有2个答案

危飞跃
2023-03-14

首先,我会有以下三张表:

用户

身份证,姓名

对话用户

用户id、消息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();
郁明诚
2023-03-14

这肯定在文档中

不管怎样。你在寻找一种多对多的关系。为此,您需要一个数据透视表(或连接表),其中包含用户的id和对话的id。

按照Laravel约定,此表将被称为conversation\u user,并将包含id(主键)、conversation\u iduser\u id

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

public function conversations(){
   return $this->belongsToMany('Conversation');
}
public function users(){
   return $this->belongsToMany('User');
}
$user = User::find(1);
$conversations = $user->conversations;

如本文所述,在将模型插入多对多关系时,应使用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));
 类似资料:
  • 我在两个表之间有一个关系,其中一个联接表只有一个结果。 当我定义一个Laravel-BelongToMany关系时,我希望它单独返回该项,而不是只返回一个元素的集合。 有没有一种方法可以在Laravel中对此进行建模? 提前感谢。 [编辑] 我将尝试使用经典的用户/角色示例来解释我想要什么。除了de和表之外,我们还有一个pivot表,它将存储用户拥有的所有角色。用户在任何给定时间只能有一个活动角色

  • 因此,我通过透视表在用户和照片之间建立了许多对许多的关系。我在我的用户模型中使用。然而,这里的问题是,我的照片表中有十几列我不需要(尤其是在json响应期间)。所以一个例子是: 是否可以修改此方法,使model只返回接受的列(例如由数组指定的列)? 注意:我只想在执行时选择特定的列。在执行之类的操作时,是的,我希望所有列都像往常一样。 编辑:我尝试在Laravel Eloquent中使用“with

  • 我对用户和资源有很多关系。 用户: 资源: 中间表是。与: 我获取资源用户表中用户id所在的所有资源。到现在为止,一直都还不错。但是,即使中间表中不存在用户id,如何获取所有资源条目呢?假设我在资源表中有3个资源。Id 1、2和3。我有一个ID为1的用户。在中间表中,我只有两行: resource_id1和user_id1和值50。 resource_id2和user_id1和值100。 但是我想

  • 我正在学习拉威尔,有一件事我无法解决。 我有什么: 用户、帖子、评论及相应模型表 使用者php:

  • 我是Laravel5.2的新手,正在开发一个遗留系统,对雄辩有点困惑,希望有人能给我代码。 共有3个表格: 卡片类别卡片2类 卡片可以是许多类别的一部分,这些类别保存在cards2cat表中。 cards2cat表的结构如下 id(主键)图像(卡)类别 我想做的是在Cards模型中有一个方法,名为getCardsWithCategors,它返回Cards信息和category表中类别的名称。 ca

  • 我有三张桌子: 类别(id、名称) 类别赛(类别赛id,锦标赛id)-- Category是可用类别列表Category_Tornament是管理员配置的类别列表Category_Tornament用户是用户已注册的类别 要获得锦标赛中的所有类别,我可以使用以下工具轻松完成: 在竞赛模型中定义归属关系 我不知道如何定义与上一个表的关系。 我需要的是用户单击几个类别,我可以运行如下操作: 我应该在哪