Symfony2 OneToMany关系 - 不调用删除操作

时间:2014-06-12 13:53:14

标签: symfony doctrine-orm entity-relationship

我正在使用Symfony 2.4.6并且我正在尝试使用OneToMany关系来管理添加到横幅中的图像。

我确实阅读了很多关于删除子元素的信息(设置orphanRemoval,将'remove'添加到级联中),但这些都不适用于我。我注意到在更新时根本没有调用删除操作 我有2个类,Banner和BannerFile,并使用收集字段类型来添加图像,除了删除操作外,它似乎工作正常。

class Banner  
{  
    /.../  

    /**
     * @ORM\OneToMany(targetEntity="BannerFile", cascade={"persist", "remove"}, mappedBy="banner", orphanRemoval=true)
     */
    private $bannerFiles;  


    /.../  

    /**
     * Remove bannerFiles
     *
     * @param BannerFile $bannerFiles
     */
    public function removeBannerFile(BannerFile $bannerFiles)
    {
        $this->bannerFiles->removeElement($bannerFiles);
    }
}  

class BannerFile
{
    /.../  

    /**
     * @var integer $banner
     *
     * @ORM\ManyToOne(fetch="EXTRA_LAZY", inversedBy="bannerFiles", targetEntity="Banner")
     * @ORM\JoinColumn(name="banner_id", nullable=false, onDelete="CASCADE", referencedColumnName="id")
     */
    private $banner; 


    /.../  
}

我的问题是没有调用removeBannerFile。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

如果您使用不支持外键的数据库表引擎类型(例如MyISAM),则会发生这种情况。

将引擎类型更改为InnoDB,然后运行以下代码以更新数据库架构。

php console doctrine:schema:update

答案 1 :(得分:0)

cascade添加到ManyToOne定义:

class BannerFile
{
    /.../  

    /**
     * @var integer $banner
     *
     * @ORM\ManyToOne(fetch="EXTRA_LAZY", inversedBy="bannerFiles", targetEntity="Banner", cascade={"remove"})
     * @ORM\JoinColumn(name="banner_id", nullable=false, onDelete="CASCADE", referencedColumnName="id")
     */
     private $banner; 


     /.../  
}