如何删除一对多关系实体

时间:2014-04-30 15:46:10

标签: symfony doctrine-orm doctrine

我的Symfony2类中有2个实体:

class InstagramShopPicture
{
 /**
     * @Exclude()
     * @ORM\OneToMany(targetEntity="InstagramPictureTag", mappedBy="picture", cascade={"remove"})
     */
    protected $tags;
}

class InstagramPictureTag
{


    /**
     * @ORM\ManyToOne(targetEntity="InstagramShopPicture", inversedBy="tags")
     * @ORM\JoinColumn(name="picture_id", referencedColumnName="id", nullable=false)
     */
    private $picture;
}

我想确保当我删除I​​nstagramShopPicture时,InstagramPictureTag也会被删除。现在的问题是,每当我尝试使用当前的设置时,它总是抱怨一些外键问题。我在这里做错了什么?

2 个答案:

答案 0 :(得分:0)

您需要定义如何处理此删除。 Check Docs 在你的情况下:

class InstagramShopPicture
{
 /**
     * @Exclude()
     * @ORM\OneToMany(targetEntity="InstagramPictureTag", mappedBy="picture", orphanRemoval=true)
     */
    protected $tags;
}

答案 1 :(得分:0)

您可以依靠数据库级别来使用onDelete

为您处理它
class InstagramShopPicture
{
    /**
    * @Exclude()
    * @ORM\OneToMany(targetEntity="InstagramPictureTag", mappedBy="picture", onDelete="CASCADE")
    */
    protected $tags;
}