如何更新有关在推进中添加关系的更多表格

时间:2012-06-16 12:02:23

标签: database symfony-1.4 propel database-integrity

我正在尝试找出在更改外键依赖项时更新其他相关表的最佳位置。

确切地说,我有一个名为'flat'的表,另一个名为'room'的表包含

  

flat_id:{type:INTEGER,foreignTable:flat,foreignReference:id,required:true}

除了方法Room :: SetFlatId()之外,Propel(1.3)因此给了我Room :: SetFlat()

但是当我在单位中添加一个房间时,我想自动对其他一些相关表进行更改,以保持一致性高于数据库定义。我以为我会覆盖Flat :: addRoom(Room $ room)来调用它的父节点,然后进行进一步的更改。

但是我遇到了一个问题,因为由于'flat_id'列是必需的,所以在保存Room对象之前总会调用SetFlatId()和setFlat()之一。

但是在保存Room对象之前,它没有id,因此我的扩展addRoom无法工作,因为没有room_id来识别其他表中的相关记录。

这似乎表明我不能将代码放入Flat :: addRoom(),这取决于已保存的房间。但那我可以把我的代码放在哪里?

显然,我可以要求在制作或更改Room对象后手动调用它;但由于它实际上正在做的是保持一种更高级别的数据库完整性,我不愿意这样做。我可以把它放到一个或两个'保存'方法中;但逻辑上只有当房间和公寓之间的关联发生变化时才需要运行。

这段代码应该放在哪里?

1 个答案:

答案 0 :(得分:1)

这是custom behavior的典型案例。