2012-06-16 81 views
1

我試圖找出更改外鍵關聯時更新其他相關表的最佳位置。如何更新關於在propel中添加關係的表

要精確,我已要求一個表 '平坦' 和另一個名爲 '房間' 包含

flat_id:{類型:INTEGER,foreignTable:平,foreignReference:ID,需要:真}

因此

除了法室:: SetFlatId(),行走(1.3)給了我房間:: SetFlat()

但當我一個房間添加到一個單位,我想自動修改到其他一些相關表格,以保持更高水平的一致性比數據庫定義。我想我會重寫Flat :: addRoom(Room $ room)來調用它的父項,然後進行這些更改。

但是我遇到了一個問題,因爲由於'flat_id'列是必需的,SetFlatId()和setFlat()之一將在房間對象保存之前始終被調用。

但是在Room對象被保存之前,它沒有ID,因此我的擴展addRoom無法工作,因爲沒有room_id來標識其他表中的相關記錄。

這似乎暗示我不能將代碼放入Flat :: addRoom(),這取決於房間已保存。但是,我可以在哪裏放置我的代碼?

很明顯,我可以在製作或更改一個Room對象後手動調用它;但由於它實際上在做的是保持一種更高級別的數據庫完整性,我不願意那樣做。我可以將它放到一個或兩個「保存」方法中;但只有當房間和公寓之間的關聯發生變化時,才能在邏輯上運行。

這段代碼應該放在哪裏?

+0

對於[自定義行爲](http://www.propelorm.org/documentation/07-behaviors.html)是不是典型的情況? – j0k

+0

你是對的。就在我發佈它之後,我意識到它屬於save(),但我並不知道這些鉤子。讓它成爲一種無用的東西,我會接受它。 –

回答