laravel模型关系转向枢轴?

时间:2016-01-04 10:07:05

标签: php mysql laravel eloquent relational-database

我在我的网络应用程序中遇到了一个问题,我希望某种善良的灵魂可以为我提供一些帮助。

在我的应用程序中,我有用户和组织 - 一个组织可以拥有许多用户,用户可以拥有许多组织,这代表了多对多关系?

User n:m Organisation

这意味着我需要一个数据透视表?我们称之为Organisation_User。目前看起来一切都很简单,但是我的复杂功能是组织中的用户可以拥有各种角色,

1)管理员 2)经理
3)财务 4)基本

具有这些角色的唯一规则是管理员取代其他所有内容。我的问题是,用户理论上可以是基本用户,也可以是同一组织中的财务用户。我正在努力研究如何最好地存储这些数据,我是否将它直接存储在数据透视表中?或者我是否像Organisation_User_Roles那样创建一个枢轴枢轴,如果是这样的话,Laravel甚至可以实现吗?那怎么样?

1 个答案:

答案 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();