2012-02-16 179 views
1

當加入兩個表之間的關係,我提出將觸發到On-更新和-刪除外部表的事件的選擇。現在我明白,當外表被刪除時,On-Delete事件將在本地表中被觸發。在-更新和-刪除觸發器

這種情況的一個實例是在一對一的關係的用戶和配置文件。在Propel中,這提供了一些額外的功能,使查找附加記錄比使用外鍵查詢簡單。現在,我將主鍵設置爲具有CASCADE的On-Delete觸發器的用戶表的外鍵。這意味着當我刪除用戶記錄時,配置文件記錄也會被刪除。現在

什麼將層疊在更新觸發做?使用propel時,我可以在不保存的情況下更改配置文件屬性,然後在用戶上調用save,如果我爲配置文件設置了級聯更新設置,保存用戶時會自動保存/更新配置文件信息

這是如此令人困惑的原因是因爲表格不知道Propel,所以必須有另外的On-Update原因,並且the Propel documentation只解釋了使用On-Delete觸發器。

任何一種關於推進有識之士將不勝感激。一些通用的定義不是我正在尋找的。

回答

2

除非因爲1.2事情發生了變化,這些僅僅是實施方式(無論是天然的或emmulated),用於tradidional RDBMS約束(mysql 5.5 constraints docs)。這與推動它與數據庫無關。因此ON UPDATE將允許您將CASCADE更新的鍵值 - 這假定您有FK的值可以更改。它與其他專欄沒有任何關係。

如果我有級聯的更新設置爲配置文件,它會自動保存/更新時保存用戶的配置文件信息?

即使您沒有CASCADE只要相關對象在您發出保存的對象上水合,它也會執行此操作。 ON UPDATE的東西與此無關,它僅僅是一個事實,即兩者之間存在一種關係,因此在每個類中都有對象成員允許這樣做。當您調用保存在對象上時,它會遍歷所有水合對象和集合,並保存標記爲已更改的任何內容。

+0

好了,所以如果我通過調用'getProfile()'(因爲我的關係1-1)水合物分佈和編輯它,我只需要調用'保存()'用戶和配置文件會自動更新(知道配置文件已被修改)? – 2012-02-16 19:12:25

+0

是的。關係的另一面也一樣。 – prodigitalson 2012-02-16 19:15:00

+0

只爲跟進。如果我執行以下操作:'$ profile = $ user-> getProfile();'然後我修改它:'$ profile-> setName('Member');',然後當我保存'$ user'時,'$ profile'也會被保存,對不對? (當您使用One-To-One關係時,'getProfile()'是一種內置的Propel方法,請參見OP中的鏈接) – 2012-02-16 20:59:42