1

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

准确地说,我有一张名为“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 之间的关联发生更改时才需要运行它。

这段代码应该去哪里?

4

1 回答 1

2

这是自定义行为的典型案例。

于 2012-06-16T16:55:32.117 回答