我在我的网络应用程序中遇到了一个问题,我希望某种善良的灵魂可以为我提供一些帮助。
在我的应用程序中,我有用户和组织 - 一个组织可以拥有许多用户,用户可以拥有许多组织,这代表了多对多关系?
User n:m Organisation
这意味着我需要一个数据透视表?我们称之为Organisation_User。目前看起来一切都很简单,但是我的复杂功能是组织中的用户可以拥有各种角色,
1)管理员
2)经理
3)财务
4)基本
具有这些角色的唯一规则是管理员取代其他所有内容。我的问题是,用户理论上可以是基本用户,也可以是同一组织中的财务用户。我正在努力研究如何最好地存储这些数据,我是否将它直接存储在数据透视表中?或者我是否像Organisation_User_Roles
那样创建一个枢轴枢轴,如果是这样的话,Laravel甚至可以实现吗?那怎么样?
答案 0 :(得分:0)
从
中阅读检索中间表列部分https://laravel.com/docs/5.1/eloquent-relationships#many-to-many
在数据透视表中,您可以添加其他列roles
,以逗号分隔角色(名称或ID),并在模型中构建自定义方法hasRole
。
请注意,这种方法可能存在可扩展性问题!
另一种方法是使用结构
创建Role
模型和附加表organisation_user_role
organisation_id
user_id
role_id
在User
模型中构建一个查询此表的方法hasRoleInOrganisation($role_id, $organisation_id)
。
如果查询此表,这种方法没有Laravelish方式。你必须使用:
DB::table('organisation_user_role')
->whereUserId($this->id)
->whereOrganisationId($organisation_id)
->whereRoleId($role_id)
->count();