【问题标题】:Symfony2 OneToMany relationship - remove action isn't calledSymfony2 OneToMany 关系 - 不调用删除操作
【发布时间】:2014-08-02 21:18:13
【问题描述】:

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

我确实阅读了很多关于删除子元素的内容(设置 orphanRemoval,将“删除”添加到级联),但这些对我都不起作用。我注意到的是,更新时根本不会调用删除操作。
我有 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 没有被调用。

感谢您的帮助。

【问题讨论】:

  • 你运行doctrine:schema:update了吗?你有什么类型的引擎?
  • 表引擎是 InnoDB。我已经运行了学说:模式:更新并且没有任何要更新的内容。
  • 您是否检查过数据库表的外键是否确实存在?
  • 这个问题可能对你有用:github.com/symfony/symfony-docs/issues/1227
  • 您是否尝试将收集字段选项by reference 设置为false?我有一个问题,如果没有设置,关联的项目就不会删除。我确定有原因,但我不记得了。

标签: symfony doctrine-orm entity-relationship


【解决方案1】:

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; 


     /.../  
}

【讨论】:

    【解决方案2】:

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

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

    php console doctrine:schema:update
    

    【讨论】:

      猜你喜欢
      • 2018-02-10
      • 2015-11-03
      • 1970-01-01
      • 1970-01-01
      • 2016-09-03
      • 1970-01-01
      • 1970-01-01
      • 2012-01-08
      • 1970-01-01
      相关资源
      最近更新 更多