我试图找出在更改外键依赖项时更新其他相关表的最佳位置。
准确地说,我有一张名为“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。但是我可以把我的代码放在哪里?
显然,我可以只要求在制作或更改 Room 对象后手动调用它;但由于它实际上在做的是维护一种更高级别的数据库完整性,所以我不愿意这样做。我可以将它放入一种或两种“保存”方法中;但从逻辑上讲,只有在 Room 和 Flat 之间的关联发生更改时才需要运行它。
这段代码应该去哪里?