我应该使用三向数据透视表以及如何使用Eloquent进行获取

时间:2019-02-21 10:51:22

标签: database laravel eloquent relationship

我正在尝试使我的口才模型发挥作用。我当前的数据库是这样的:

enter image description here

棘手的部分是,对于给定的环境和项目,可以有多个访问权限。所以可能我有这样的事情:

access datatabase

请注意,这两行具有相同的environment_id和project_id。

问题1:我的数据库设计合理吗?还是我应该创建一个三向数据透视表(id,project_id,environment_id,access_id)?

问题2::如何在我的项目模型中获取与项目相关的所有环境?现在看起来像这样:

class Project extends Model
{    

    public function accesses(){
        return $this->hasMany('App\Models\Access', 'project_id');
    }


    public function environments(){
      // The missing part i can't get to work :(
    }

}

1 个答案:

答案 0 :(得分:0)

我建议您为访问添加一个单独的表,这样您就不会有重复的数据或密码重置问题。
如果只想将所有环境链接到一个项目,则需要与数据透视表建立多对多或一对多关系。

public function environments()
    {
     return $this->belongsToMany('environment', 'environment_project');
     // the first argument is the model you link to, the second the pivot table
    }

型号:

Environment: id, name

Project: id, name

Environment_project:id, environment_id, project_id, access_id

Access: id, username, password

修改,在数据透视表上访问

public function environments()
    {
     return $this->belongsToMany('environment', 'environment_project')->withPivot('username', 'password');
     //now you can do project::find(1)->environments->pivot->username
    }