我正在尝试找出在更改外键依赖项时更新其他相关表的最佳位置。
确切地说,我有一个名为'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对象后手动调用它;但由于它实际上正在做的是保持一种更高级别的数据库完整性,我不愿意这样做。我可以把它放到一个或两个'保存'方法中;但逻辑上只有当房间和公寓之间的关联发生变化时才需要运行。
这段代码应该放在哪里?