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

如何在Laravel 5.5中实现多个多对多关系?

彭修筠
2023-03-14

我正在做一个小型的laravel项目来实现雄辩的关系,我主要有多个模型(项目、任务、用户、文件等)

一个项目可以分配多个用户,附加多个文件,也可以有多个任务。一个任务可以分配多个用户,也可以分配多个文件,以及多个其他东西。我已经谷歌和实施了hasManyPass,和归属许多关系,但我对关系感到困惑很多。有什么帮助吗?

Project.php

class Project extends Model
{

protected $fillable = ['name', 'user_id'];

public function users()
{
    return $this->belongsTo(User::class);
}

public function tasks()
{
    return $this->hasManyThrough(Task::class, User::class);
}
}

Task.php

public function user()
{
    return $this->belongsTo(User::class);
}

User.php

public function tasks()
{
    return $this->hasMany(Task::class);
}

public function project()
{
    return $this->belongsTo(Project::class);
}

我得到的错误是,当我去项目/1我得到多个任务附加到他们,但不是多个用户。

共有1个答案

佟阳焱
2023-03-14

似乎您缺少数据透视表。我会根据你的表格做一些假设

项目、任务、用户、文件

一个用户可以参与多个项目,并且一个项目可以分配多个用户。使用任务或文件获取项目用户是不合理的,除非每个用户都可以访问每个项目、执行任务和上载文件。。

但是如果有某种分配过程(用户到项目),你必须进行数据透视表迁移

比如:

project_has_user或laravel标准:users_projects

然后,您可以在项目模型和用户模型上实现belongtomany关系

任务

 类似资料:
  • 问题内容: 我相信标题是不言而喻的。如何在PostgreSQL中创建表结构以建立多对多关系。 我的例子: 问题答案: SQL DDL(数据定义语言)语句如下所示: 我强烈建议您这样做,因为产品名称几乎不是唯一的(不是很好的“自然键”)。此外,强制使用唯一性并在外键中引用该列通常比使用存储为或的字符串便宜(4字节(甚至8字节))。 不要使用基本数据类型的名称作为 标识符 。尽管这是可能的,但这是不好

  • 问题内容: 我正在制作一个具有多对多关系的SQLite数据库,并使用以下代码将其分解为两个一对多的关系 错误: 有谁知道我该如何解决这个错误? 问题答案: 查看文档; 它向您表明,如果您在字段定义本身上指定了外键,则不应使用关键字本身。此外,正如 CL 指出的那样,您使用了太多逗号 。 ,即使单独指定约束,外键名称也不应放在括号中。 该语句可以满足您的要求: 还要注意,如果MODULEID是表MO

  • 最好的办法还是写一个真实的项目,从博客项目开始。 了解关系(1对1,1对多)在mongoose里如何实现 UserSchema = new Schema({ ... contacts:[] }); 了解关系(1对1,1对多,多对多)在mongoose里如何实现 ContactSchema = new Schema({ ... owner: { type

  • 我需要在Firestore上建立多对多关系模型。以下是对这些要求的总结。 > 一家公司可以为一个项目雇佣许多承包商。承包商可以在不同的时间为多家公司的不同项目工作。 承包商或公司的数量不应受到限制,即应使用集合或子集合。 承包商应能够按公司进行查询;反之亦然,公司应该能够通过承包商进行查询。例如,(1)承包商可能要求提供他/她工作过的公司的清单,并按项目排序 就公司而言,承包商可以改变状态,例如工

  • 我需要在我的数据库中创建多个多对多的关系。 有一个“主”表,我们称之为“项目”。 然后有3个表包含“选项”。 假设我们有:品类、地域、用户。这些保存的唯一信息是项目的名称和ID。 可以将多个类别、区域和用户分配给多个项目。 因此,我有两个选项来创建这种关系: 1)为每个'选项'表创建关系表。每个表包含两列:project_id和category_id、region_id或user_id。使用这种方

  • 问题内容: 任何人都可以解释在设计带有示例的表时如何实现一对一,一对多和多对多关系吗? 问题答案: 一对一: 使用外键访问被引用的表: 您还必须在外键列()上设置唯一约束,以防止子表()中的多行与引用表()中的同一行相关。 一对多 :在关系的许多方面使用外键链接回“一个”侧: 多对多 :使用联结表(例如): 查询示例: