【发布时间】: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