我正在使用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。
感谢您的帮助。
答案 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;
/.../
}