在两个表之间添加关系时,我可以选择在外表的On-Update和On-Delete事件中添加触发器。现在我明白了当删除外表时,将在本地表中触发On-Delete事件。
此示例是一对一关系中的用户和个人资料。在Propel中,这提供了一些额外的功能,使查找附加记录比使用外键查询更简单。现在,我将主键设置为具有CASCADE的On-Delete触发器的用户表的外键。这意味着当我删除用户记录时,配置文件记录也会被删除。
现在,级联的On-Update触发器会做什么?使用推进时,我可以更改配置文件属性而不保存,然后为用户调用保存,如果我有用于配置文件的级联更新设置,它会在保存用户时自动保存/更新配置文件信息 ?
这是如此令人困惑的原因是因为表格不了解Propel,因此On-Update必须有另一个原因,the Propel documentation仅解释使用On-Delete触发器。
任何有关Propel的见解都将受到高度赞赏。一些通用定义不是我想要的。
答案 0 :(得分:2)
除非自1.2以来发生了变化,否则这些只是传统RDBMS约束(mysql 5.5 constraints docs)的简单实现(本机或经过仿真)。这与推动它与数据库无关。因此ON UPDATE
将允许您CASCADE更新的键值 - 这假设您有FK值,其中值可以更改。它与其他列没有任何关系。
如果我有关于配置文件的级联更新集,它会在保存用户时自动保存/更新配置文件信息吗?
即使您没有启用CASCADE
,只要相关对象在您发出保存的对象上保持水分,它就会执行此操作。 ON UPDATE
的东西与此无关,仅仅是这两者之间存在关系,因此在每个类中都有对象成员允许这样做。当您在对象上调用save时,它会遍历所有水合对象和集合,并保存标记为已更改的任何内容。