2014-09-12 54 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