2014-09-12 85 views
1

我像一個在教義的文檔的關係,所以我會用它作爲一個例子:破壞學說一比一的關係

Product: 
    type: entity 
    oneToOne: 
    shipping: 
     targetEntity: Shipping 
     joinColumn: 
     name: shipping_id 
     referencedColumnName: id 

我試圖刪除Shipping實體,但我得到一個外鍵約束異常,因爲Product的行持有對它的引用。處理這個問題的正確方法是什麼? yaml中有什麼我可以添加來照顧這個嗎?或者我需要做類似如下:

$product->setShipping(null); 
$entityManager->persist($product); 
$entityManager->remove($shipping); 
$entityManager->flush(); 
+0

您是否嘗試執行'$ em-> remove($ shipping); $ em-> flush();'在產品上沒有設置運送到'null'? – 2014-09-12 16:30:32

+0

@igor是的,我做到了。得到了外鍵約束異常 – David 2014-09-12 16:58:48

回答

0

您應該設置onDelete選項CASCADE如果你想Shipping進行過刪除,或SET NULL如果要刪除只是Product

Product: 
    type: entity 
    oneToOne: 
    shipping: 
     targetEntity: Shipping 
     joinColumn: 
     name: shipping_id 
     referencedColumnName: id 
     onDelete: "SET NULL" 

你可以在Doctrine docs上閱讀更多關於此。

+0

我根本沒有試圖刪除該項目。我仍然希望它存在。你在哪裏閱讀過「SET NULL」? – David 2014-09-12 17:52:42

+0

對不起,在這種情況下,您應該將'onDelete'放入Shipping實體中。我沒有在文檔中看到* SET NULL *,但我已經知道它存在。這是一個MySQL行爲。運輸實體中的 – lsouza 2014-09-12 18:26:36

+0

,與yaml中'type'鍵的級別相同? – David 2014-09-12 19:17:36