原则:双向一对一关系,两个实体都被删除


Doctrine: bidirectional OneToOne relationship, both entities being deleted

嘿,伙计们,我有两个具有双向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对象。我不希望删除Sale对象,我只希望Sale中的TransportInvoice参数为null。我有什么不明白的?

如果这还不清楚,请告诉我,谢谢你的帮助!

我认为问题出在关系设计上。在您的示例中,"销售"是主要实体,因此不需要"运输发票"参考。TransportInvoice.php中的"sale"引用就是该原则所需的全部内容,因此请按照重试的方式编辑sale。

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

我希望它能帮助你。