Doctrine Symfony4:删除同一实体上的OneToMany和OneToOne时的问题

Doctrine Symfony4:删除同一实体上的OneToMany和OneToOne时的问题,doctrine,foreign-keys,symfony4,Doctrine,Foreign Keys,Symfony4,我有一个技巧实体,它包含与同一实体的OneToOne($mainImage)和OneToMany($images)关联。 我不能删除一个技巧:它告诉我存在外键约束。 当然,因为$mainImage有一个用于图像的FK,而图像有一个用于技巧的外键 如果我手动清空$main图像并在删除前刷新,它会工作,但这很棘手,我无法忍受对我的代码的倾斜性如此不关心 我认为围绕教义的“级联”或“孤儿移除”属性可以做一件事,但是,正如你们在下面看到的,我已经尝试了所有这些属性,但我仍然得到了错误 class Tri

我有一个技巧实体,它包含与同一实体的OneToOne($mainImage)和OneToMany($images)关联。 我不能删除一个技巧:它告诉我存在外键约束。 当然,因为$mainImage有一个用于图像的FK,而图像有一个用于技巧的外键

如果我手动清空$main图像并在删除前刷新,它会工作,但这很棘手,我无法忍受对我的代码的倾斜性如此不关心

我认为围绕教义的“级联”或“孤儿移除”属性可以做一件事,但是,正如你们在下面看到的,我已经尝试了所有这些属性,但我仍然得到了错误

class Trick
{
    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Image", mappedBy="trick", orphanRemoval=true, cascade={"persist", "remove"})
     */
    private $images;

    /**
     * @ORM\OneToOne(targetEntity="App\Entity\Image", cascade={"persist", "remove"}, orphanRemoval=true)
     * @JoinColumn(name="main_image_id", referencedColumnName="id", onDelete="set null")
     */
    private $mainImage;

}
以及图像实体:

class Image
{
    /**
     * @ORM\ManyToOne(targetEntity="Trick", inversedBy="images")
     * @ORM\JoinColumn(nullable=false)
     */
    private $trick;
}
有人能帮我吗?
你会得到我所有的感激

您必须先删除setter中的元素

public function setImage($image){
    if($this->image !== null) // first remove old one from images
        $this->images->removeElement($this->image);
    $this->image = $image;
}
反之亦然:如果要从阵列中删除图像,请首先检查其是否为当前图像,然后将其删除