Doctrine:双向OneToOne关系,两个实体都被删除

时间:2015-12-23 14:57:25

标签: php symfony doctrine-orm

嘿伙计,所以我有两个实体,双向的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对象,我只希望销售中的TransportInvoice参数为null。我不理解的是什么?

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

1 个答案:

答案 0 :(得分:0)

我认为问题在于关系设计。在您的示例中,Sale是主要实体,因此不需要transport_invoice引用。 TransportInvoice.php中的“sale”引用就是该学说所需要的,因此请再次尝试编辑Sale。

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

我希望它可以帮到你。