【问题标题】:Many To Many Relationship 3 Models Laravel [5.6]多对多关系 3 模型 Laravel [5.6]
【发布时间】:2018-12-12 04:25:51
【问题描述】:

我的应用中有 3 个模型CompanyUserRole

业务规则是这样的:

  • 用户公司角色
  • ElonSpaceXCEO
  • CindySpaceX经理
  • ElonTeslaCEO

我正在考虑创建第 4 个模型,例如 Employees

但我不知道如何创建迁移并定义这些模型之间的关系。

【问题讨论】:

  • 角色,在您的示例中,似乎不需要自己的模型,我将其定义为用户和公司之间关系的属性。
  • 有外援?因为我需要检查用户在该公司中的角色类型,所以每个角色都有一些权限。也许我的角色示例不清楚。
  • 是的,如果角色与它有更多关联,那么将其作为一个单独的模型可能是有意义的。如果只是一个职位,那么一个属性就足够了。在单独模型的情况下,我认为 role_id 属于 company_users 表/关系,因为角色似乎依赖于该关系。

标签: laravel eloquent laravel-5.6


【解决方案1】:

我也会去4张桌子

  • 用户
  • 角色
  • 公司
  • user_role_company

前三个表将保存常规数据,不保存其他表的任何外键,4个表将这些表相互关联,具有以下属性

  • user_id
  • role_id
  • company_id

现在您的欠表(用户、角色和公司)将与 user_role_company 的关系定义为hasManyuser_role_company 将与这三个表的反向关系定义为belongsTo

class User extends Model{

    public function userRoleCompany()
    {
        return $this->hasMany('App\UserRoleCompany', 'user_id','id');
    }

}

class Role extends Model{

    public function userRoleCompany()
    {
        return $this->hasMany('App\UserRoleCompany', 'role_id','id');
    }

}

class Company extends Model{

    public function userRoleCompany()
    {
        return $this->hasMany('App\UserRoleCompany', 'company_id','id');
    }

}


class UserRoleCompany extends Model{

    public function user()
    {
        return $this->belongsTo('App\User', 'user_id');
    }

    public function role()
    {
        return $this->belongsTo('App\Role', 'role_id');
    }

    public function company()
    {
        return $this->belongsTo('App\Company', 'company_id');
    }

}

【讨论】:

  • 呃,我正在使用 Laravel 7,只是出于好奇,我如何检索,例如,给定用户 A,我如何找出他/她所属的公司以及他/她的角色戏剧?如果给定用户 A 和公司 B,我可以找到角色吗?
  • 在第一种情况下查询用户模型并使用“with()”方法加载“userRoleCompany”。对于第二个示例,您可以直接查询第 4 个模型 UserRoleCompany 并使用“with()”方法加载“角色”
  • @MKhalidJunaid 我的情况与上面的问题类似,当我想知道与特定事件相关联的乐队时,我有 3 个模特活动、乐队、艺术家在这种情况下共享一张桌子,我得到了一个重复的乐队,因为它可能与不同的艺术家联系在一起。我怎样才能通过这个?
猜你喜欢
  • 1970-01-01
  • 2021-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-25
  • 2018-11-14
  • 2018-09-18
  • 2018-12-14
相关资源
最近更新 更多