0
我與Doctrine2.2.2工作結合Symfony的2.0.15。我注意到,使用類表繼承,當例如:Doctrine2類表繼承和級聯刪除
/**
* @Entity
* @InheritanceType("JOINED")
* @DiscriminatorColumn(name="discr", type="string")
* @DiscriminatorMap({"person" = "Person", "employee" = "Employee"})
*/
這將創建一個外鍵級聯刪除子實體/表(在這種情況下,公司僱員)的約束。主義的documentation on this含有一種重要的前瞻性黃色的盒子,上面寫着:
當你不使用SchemaTool生成所需的SQL你 應該知道,刪除一類表繼承利用了 外鍵屬性的ON DELETE CASCADE在所有數據庫 實現中。實現此故障自己將導致數據庫 死行。
這是沒有意義的我。這是否意味着如果您不使用SchemaTool,則Doctrine將創建外鍵級聯刪除約束?如果有人使用SchemaTool,Doctrine會使用它的內置級聯功能嗎?
好的,知道了。希望有人會清理這個語法。出於好奇,是否有任何方法可以使用Doctrine自己的級聯功能而不是ON DELETE CASCADE? – nurikabe
我不這麼認爲,那可能是件好事。讓數據庫執行級聯刪除是正確的選擇。例如,如果您手動從兩個表中的任何一箇中刪除記錄,則最終會生成一個包含一半數據的孤立記錄。不完全是你想要在你的數據庫中。當您希望與自己的孩子一起刪除整個實體(這裏的區別在於,用連接表繼承結構,你有每桌一個實體在2個表,而不是一個實體)學說的級聯功能更加有用。 –
優秀點。 – nurikabe