cakephp - 一个与众不同的关系

时间:2010-12-06 15:58:17

标签: cakephp relationship

我想知道这是否可以通过

来实现
contents       orgs            folders
 id             id              id
 name           name            title
 link

join table - folder_elements
              id
              element_id
              order

内容通过folder_elements

有很多文件夹

orgs在folder_elements

中有很多文件夹

所以我的问题是,是否可以使用element_id存储content.id或org.id?

亚历

1 个答案:

答案 0 :(得分:4)

您所描述的是一种HABTM(HasAndBelongsToMany)关联。您可以按照建议定义模型间关联,但是存在一个非常重要的设计缺陷:您如何考虑将相同ID用于orgs记录和contents记录的情况,并希望将它们与同一folder记录联系起来?在你的加入表中区分这两者是不可能的。

有很多方法可以解决这个问题,但是它们需要更多的程序逻辑或更加混乱的数据库架构,这对可维护性提出了挑战。

更优雅,更强大的解决方案是合理化您的数据库结构。如果没有迫切需要让一个连接表来统治它们,你可以设计你的模型关联:

  • Content hasMany ContentsFolder belongsTo Folder
  • Folder hasMany ContentsFolder belongsTo Content
  • Org hasMany OrgsFolder belongsTo Folder
  • Folder hasMany OrgsFolder belongsTo Org

这是明确定义的HABTM关联的内部结构,因此您可以在连接表中定义字段。您的contentsfolders表将保持不变,但您的两个连接表将如下所示:

contents_folders
-> id
-> content_id
-> order

orgs_folders
-> id
-> org_id
-> order

不幸的是,这需要定义五个模型而不是三个模型,但这是CakePHP对象关系建模的局限性。