2015-12-23 5 views
1

Эй, ребята, так у меня есть 2 объектов с двунаправленной связи OneToOne:Doctrine: двунаправленная связь OneToOne, обе сущности удаляемого

Sale.php

/** 
* @var TransportInvoice 
* 
* @ORM\OneToOne(targetEntity="WKDA\Common\Entity\Car\TransportInvoice\TransportInvoice", mappedBy="sale") 
* @ORM\JoinColumn(name="transport_invoice", referencedColumnName="id", nullable=true, onDelete="SET NULL") 
*/ 
protected $transportInvoice; 

TransportInvoice.php

/** 
* @var Sale 
* @ORM\OneToOne(targetEntity="WKDA\Common\Entity\Car\Sale", inversedBy="transportInvoice", cascade={"persist"}, orphanRemoval=true) 
* @ORM\JoinColumn(name="sale", referencedColumnName="id", nullable=false) 
*/ 
protected $sale; 

В моем контроллере, чтобы удалить транспортную фактуру из продажи, Ниже делается:

$transportInvoice = $car->getSale()->getTransportInvoice(); 
      $em = $this->getEntityManager(); 

      $em->remove($transportInvoice); 
      $em->flush(); 

Это удаляет TransportInvoice, но он удаляет объект продажи, а также. Я не хочу, чтобы объект Sale был удален, я просто хочу, чтобы параметр TransportInvoice в продаже был нулевым. Что я не понимаю?

Если это неясно, дайте мне знать, спасибо за вашу помощь!

+0

Это может быть и orphanRemoval. – craigh

+0

Пробовал удалить orphanRemoval, не повезло –

+0

Проверьте, кто удаляет объект. Это каскадное удаление в базе данных или в Доктрине? – Stepashka

ответ

0

Я думаю, что проблема в отношении дизайна. В вашем примере Sale является основным объектом, поэтому ссылка transport_invoice не требуется. Ссылка «sale» в TransportInvoice.php - это все, что нужно доктрине, поэтому отредактируйте «Продать», чтобы повторить попытку.

/** 
* @var TransportInvoice 
* 
* @ORM\OneToOne(targetEntity="WKDA\Common\Entity\Car\TransportInvoice\TransportInvoice", mappedBy="sale") 
*/ 
protected $transportInvoice; 

Я надеюсь, что это вам поможет.

Смежные вопросы