如何在CakePHP中创建多hasMany关联的mysql表?
我正在定义一个全新的数据库。我现在面临一个问题 我会把它描述为“平常”,但仍然找不到好的 来自网络的信息。问题是: 我的数据库中有许多表(我将其描述为指南),例如:如何在CakePHP中创建多hasMany关联的mysql表?,mysql,cakephp,database-design,uuid,polymorphic-associations,Mysql,Cakephp,Database Design,Uuid,Polymorphic Associations,我正在定义一个全新的数据库。我现在面临一个问题 我会把它描述为“平常”,但仍然找不到好的 来自网络的信息。问题是: 我的数据库中有许多表(我将其描述为指南),例如: 技巧 地点 活动 等等 现在,对于所有这些指南类型,我想添加一个注释功能和 其他类似功能,如附加图像和视频。我有很多类型的指南,所以我放弃了为每个指南分别设置一个评论图像和视频表的想法。他们每人需要一张桌子 问题是,实现这一目标的最佳方式是什么?我听说并阅读过3种解决方案,但我对其中任何一种都不熟悉 我读过关于使用UUID可以解
- 技巧
- 地点
- 活动
- 等等
- 我将创建一个新表:Guides,它可以有UUID字段
- 然后将所有这些指南类型(技能等)链接到指南表(指南作为父项,另一个作为子项)
- 父级和子级都有UUID字段,并且在创建指南时,父级和子级将获得相同的UUID,以便可以链接它们。孩子也有自己的Id字段
- 然后,使用指向指南的UUID字段加上注释的单独id int字段,将注释链接到指南
请告诉我这是正确的方法还是完全是垃圾,如果是的话,我应该怎么做 检查,在那里创建数据库布局,稍后下载SQL。检查,在那里创建数据库布局,稍后下载SQL。您考虑过使用正常的
与条件有许多关系吗
你想过使用一个正常的与一个条件有很多关系吗
我读了更多关于UUID的内容,因为它们允许应用程序范围内的唯一ID,所以我能够实现数据库的“继承”风格
我在每个表名的开头使用了自己的前缀,以避免保留表名冲突,例如对象。您可以使用任何类型的前缀,例如:my_u,并像使用my_u对象一样使用它。在此示例中,所有表都应使用前缀
所以我创建了表对象。它具有二进制(36)类型的id字段。Cake将其识别为UUID字段。然后我使用1:1标识关系,并从中继承其他表,我希望与其他人进行交互
因此,我创建了与评论、视频、图片表的1:1标识关系,以便该表的标识外键也是主键
然后,我创建了映射表,使用了两个不带主键的1:1非标识关系。这意味着这真的是一种与自我的关系
现在,让我从Objects表“继承”其他表,比如具有1:1标识关系的News表。然后,可以使用映射表将注释或任何其他与对象具有1:1标识关系的内容链接到新闻表
我希望这也能帮助其他正在考虑这种解决方案的人。我阅读了更多关于UUID的内容,因为UUID允许应用程序范围内的唯一ID,所以我能够实现数据库的“继承”风格
我在每个表名的开头使用了自己的前缀,以避免保留表名冲突,例如对象。您可以使用任何类型的前缀,例如:my_u,并像使用my_u对象一样使用它。在此示例中,所有表都应使用前缀
所以我创建了表对象。它具有二进制(36)类型的id字段。Cake将其识别为UUID字段。然后我使用1:1标识关系,并从中继承其他表,我希望与其他人进行交互
因此,我创建了与评论、视频、图片表的1:1标识关系,以便该表的标识外键也是主键
然后,我创建了映射表,使用了两个不带主键的1:1非标识关系。这意味着这真的是一种与自我的关系
现在,让我从Objects表“继承”其他表,比如具有1:1标识关系的News表。然后,可以使用映射表将注释或任何其他与对象具有1:1标识关系的内容链接到新闻表
我希望这也能帮助其他正在考虑这种解决方案的人。我有,但如果我理解正确,它会断开这些表之间的链接,它们必须手动编码。我希望寻求一种解决办法,如果可能的话,不会中断联系。或者cakephp处理这种类型的解决方案有多好?我有,但如果我理解正确,它会断开这些表之间的链接,它们必须手动编码。我希望寻求一种解决办法,如果可能的话,不会中断联系。或者cakephp如何处理这种类型的解决方案?这是我尝试过的,看起来还可以,但我担心如果赔率/地点/事物得到相同的指南id,那么可能会破坏系统,因为相同的指南会引用多个“真正的指南”。还是我什么都不担心?这是我尝试过的,看起来还可以,但我担心如果机会/地点/事物得到相同的指南,它会破坏系统
class Skill extends AppModel {
var $hasMany = array(
'Comment' => array(
'className' => 'Comment',
'conditions' => array('Comment.type' => 1), // 1 for skills, 2 for places etc. or something like that.
)
);
}