【问题标题】:How can I implement multiple many-to-many relationship in Laravel 5.5?如何在 Laravel 5.5 中实现多个多对多关系?
【发布时间】:2019-02-02 21:02:08
【问题描述】:

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

一个项目可以分配多个用户,附加多个文件,还可以有多个任务。 单个任务可以分配多个用户,也可以分配多个文件以及多个其他内容。我已经用谷歌搜索并实现了 hasManyThrough 和 belongsToMany 关系,但我对关系感到很困惑。有什么帮助吗?

项目.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);
}
}

任务.php

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

用户.php

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

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

我得到的错误是当我去项目时/1 我得到了多个任务,但没有多个用户。

【问题讨论】:

  • 先添加一些代码,不管你做了什么。
  • 我已经用一个惊人的语法正确要求更新了我的答案。
  • 也许你应该尝试多态关系?用户有很多任务,项目有很多任务,项目有很多用户。似乎多态关系更兼容?
  • 你确定吗?我在帖子、视频和评论中尝试过。我猜当您需要一个帖子和一个视频来拥有多个 cmets 时,这很有用。

标签: php laravel eloquent laravel-5.2


【解决方案1】:

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

项目、任务、用户、文件

一个用户可以参与多个项目,一个项目可以分配多个用户。使用任务或文件来获取项目用户是不合逻辑的,除非每个用户都可以访问每个项目并执行任务并上传文件..

但如果有某种分配过程(用户到项目),您将不得不进行数据透视表迁移

类似:

project_has_user 或在 laravel 标准中:users_projects

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

任务 用户关系也是一样的...你还应该创建一个 users_tasks 数据透视表

【讨论】:

  • 谢谢你,所以我明白你的意思是使用任务或文件来获取项目用户没有意义,因此分配过程将是用户将获得由特定角色分配给他们的任务和项目。他们自己不能创建项目/任务。
  • 那么您至少需要 users_tasks 数据透视表。不过,我仍然会使用 users_projects 表来更容易查询用户。但是如果你想把你的表保持在最低限度,users_tasks pivot 应该就足够了,虽然你会让你的查询更复杂一点......但你仍然不能从项目 -> 任务 -> 用户中获得很多...因为一个用户可以同时执行多个任务,并且您不会在用户上拥有任务 ID...
  • 谢谢你救了我!这就是错误所在..我的 hasManythrough 无法通过 project->tasks->users 工作
猜你喜欢
  • 2018-03-16
  • 1970-01-01
  • 2018-08-13
  • 2013-08-08
  • 1970-01-01
  • 1970-01-01
  • 2018-05-22
  • 2012-04-05
  • 1970-01-01
相关资源
最近更新 更多