Symfony OneTONE单向级联={“持久化”、“删除”}不工作

Symfony OneTONE单向级联={“持久化”、“删除”}不工作,symfony,doctrine-orm,Symfony,Doctrine Orm,在我的symfony项目中,我遇到了两个由单向OneToOne关系链接的实体的问题。我的实体是:俱乐部和地址,俱乐部可以有地址。见下文实体声明: 俱乐部实体 class Club{ /** * @ORM\OneToOne(targetEntity="FFPM\MainBundle\Entity\Address", cascade={"persist", "remove"}, orphanRemoval=true) * @ORM\JoinColumn(name="address_id", re

在我的symfony项目中,我遇到了两个由单向OneToOne关系链接的实体的问题。我的实体是:俱乐部和地址,俱乐部可以有地址。见下文实体声明:

俱乐部实体

class Club{
/**
 * @ORM\OneToOne(targetEntity="FFPM\MainBundle\Entity\Address", cascade={"persist", "remove"}, orphanRemoval=true)
 * @ORM\JoinColumn(name="address_id", referencedColumnName="id", nullable=true)
 */
protected $address;

...

}
class Address{
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

...

}
地址实体

class Club{
/**
 * @ORM\OneToOne(targetEntity="FFPM\MainBundle\Entity\Address", cascade={"persist", "remove"}, orphanRemoval=true)
 * @ORM\JoinColumn(name="address_id", referencedColumnName="id", nullable=true)
 */
protected $address;

...

}
class Address{
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

...

}

由于某种原因,当我删除一个俱乐部时,该地址会保留在数据库中。我尝试过孤儿移除和级联{“移除”},但我无法让它工作,即使我很确定这是一个简单的错误。

尝试使用以下结构:

     /**
     * @ORM\OneToOne(targetEntity="FFPM\MainBundle\Entity\Address", mappedBy="entidad", cascade={"persist", "remove"})
     * @ORM\JoinColumn(name="address_id", referencedColumnName="id", onDelete="CASCADE", nullable=true)
     **/
    private $personaFisica;

关系OneTONE单向原则只管理一侧,因为您没有完成关系。所以,有两种方法可以持久化或删除地址实体,一种是使用域事件侦听器,另一种是手动管理实体。不幸的是,这两种情况都不是很好的做法。

谢谢你的回答,但我很确定,如果我这样做,每次我删除一个地址,它都会删除俱乐部。但我不想完全相反。onDelete=“CASCADE”应该位于相反的一侧。我没有,因为我处于单向关系中。您是否更新了数据库模式?(不确定是哪一个,但其中一个delete注释需要模式更新,如果我重新调用正确,我之前有一次被卡住了)不确定这里是否是这种情况,但请尝试一下