2014-09-12 2 views
1

У меня есть отношения, как в Документах доктрины таким образом я буду использовать его в качестве примера:разрушить отношения один к одному в доктрине

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

Я пытающийся удалить Shipping объект, но я получаю исключение ограничения внешнего ключа, потому что строка Product содержит ссылку на нее. Каков правильный способ справиться с этим? Есть ли что-то в ямле, которое я могу добавить, чтобы позаботиться об этом? Или мне нужно сделать что-то, как показано ниже:

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

Вы пытались просто сделать '$ em-> remove ($ shipping); $ em-> flush(); 'не устанавливая доставку на' null' на продукт? –

+0

@igor да я сделал. Получил исключение ограничения внешнего ключа – David

ответ

0

Вы должны установить onDelete вариант КАСКАД если вы хотите 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

+0

Прошу прощения, в этом случае вы должны поместить 'onDelete' в суппорт. Я не видел * SET NULL * в документах, но я уже знал, что он существует. Это поведение MySQL. – lsouza

+0

в отправителе, на том же уровне, что и клавиша 'type' в yaml? – David