2

我有三个表(块、角色、用户),其中架构中存在以下情况:

blocks have many users
users have many blocks
users have many roles, but the roles are specific to the block (and the user)
blocks have many roles, but the roles are specific to the user (and the block)

例如:

user => john
belongs to block => 'metro' with role => 'builder'
belongs to block => 'rural' with role => 'investor'

user => dan
belongs to block => 'metro' with role => 'resident'
belongs to block => 'rural' with role => 'investor'

我有一个名为 block_role_user 的连接表,其中包含以下列:

id   block_id   role_id   user_id   created   modified

我想这将是所有三个表之间的 hasandbelongstomany 关系。我考虑过在块和用户之间使用 hasandbelongstomany 表以及角色和用户之间的另一个 hasandbelongstomany 表来布局,但这并不能完全定义块、角色和用户之间的唯一关系。

我正在寻找解决此问题的最佳方法的建议,并感谢任何建议。

我已经研究过绑定模型,但这似乎不适用于我在这里拥有的独特的三部分关系。

我考虑过创建一个名为 blockroleuser 的模型并使用标准 cakephp 约定设置关系。如果这是一种可接受的方式,您能否就命名模型和控制器文件提供一些指导?

再次感谢...

4

1 回答 1

0

如果我说对了,那么您正在寻找比 更松散的关系HABTM,它将定义 a User、 aBlock和 a之间的特定连接Role

就我个人而言,我可能会使用一个模型来定义这些关系belongs to,其中 aUser可以有很多,比如:

User hasMany Whatever

Whatever belongsTo User
         belongsTo Block
         belongsTo Role

这可能或多或少是您在谈论BlockRoleUser模型时所提到的,正确的命名可能取决于块的确切含义。当然,像例如这样的通用名称Involvement甚至UserBlockRole可能也可以,我认为您不应该为此烦恼太多。

无论如何,这对我来说看起来非常简单和严格,如果您的应用程序有必要,那么HABTM也可以使用同一张表设置其他关系。这些HABTM关系很可能仅用于选择,例如,当需要查询所有BlocksaUser相关时,或者在测试 aUser是否与特定相关时Block,等等......

于 2013-07-31T09:25:50.283 回答