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

时间:2018-08-28 09:18:29

标签: php laravel eloquent laravel-5.2

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

一个项目可以分配多个用户,附加到该文件的多个文件,还可以具有多个任务。 一个任务可以分配多个用户,也可以分配多个文件,以及其他许多东西。我已经谷歌搜索并实现了hasManyThrough,并属于多对多关系,但是我对关系感到很困惑。有帮助吗?

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 个答案:

答案 0 :(得分:0)

好像您缺少透视表。我将根据您的表格做出一些假设

项目,任务,用户,文件

一个用户可以在多个项目中,一个项目可以分配多个用户。除非每个用户都可以访问每个项目并执行任务并上传文件,否则使用任务或文件来吸引项目用户是不合逻辑的。

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

类似:

project_has_user或laravel标准中:users_projects

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

任务<->用户关系是相同的方式...您还应该创建一个users_tasks数据透视表