我試圖找出更改外鍵關聯時更新其他相關表的最佳位置。如何更新關於在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對象後手動調用它;但由於它實際上在做的是保持一種更高級別的數據庫完整性,我不願意那樣做。我可以將它放到一個或兩個「保存」方法中;但只有當房間和公寓之間的關聯發生變化時,才能在邏輯上運行。
這段代碼應該放在哪裏?
對於[自定義行爲](http://www.propelorm.org/documentation/07-behaviors.html)是不是典型的情況? – j0k
你是對的。就在我發佈它之後,我意識到它屬於save(),但我並不知道這些鉤子。讓它成爲一種無用的東西,我會接受它。 –