我有两个参与者(针对这个问题进行了简化): 文件夹:
class Folder {
/**
* @var ArrayCollection
* @ORM\OneToMany(targetEntity="File",mappedBy="folder")
**/
private $files;
}
档案:
class File {
/**
* @var Folder
* @ORM\ManyToOne(targetEntity="Folder",inversedBy="files")
* @ORM\JoinColumn(onDelete="CASCADE")
**/
private $folder;
}
我正在使用数据库级级联来管理实体级联。
我删除了一个«File»时删除了一个事件监听器(为了删除与实体«File»相关的MongoDB文件)
这里是eventListener:
class MysqlMongoDBIntegrity{
/**
* @var DocumentManager
*/
private $_odm;
/**
* @var EntityManager
*/
private $_em;
/**
* @param ContainerInterface
*/
public function setODMManager(DocumentManager $manager)
{
$this->_odm = $manager;
}
public function preRemove(LifecycleEventArgs $args)
{
$entity = $args->getEntity();
$this->_em = $args->getEntityManager();
if ($entity instanceof File) {
/** @var MongoDocumentRepository $mongoRepo */
$mongoRepo = $this->_odm->getRepository('MYBundle:MongoDocument');
$mongoRepo->removeMongoDocument($entity->getMongoDocumentId());
}
}
}
直接删除«File»实体时会按预期触发事件。但是,当删除«Folder»实体时,指定为数据库级的级联不会触发事件。
有没有办法在不改变@JoinColumn中的级联的情况下触发此事件?
我知道将级联委托给Doctrine(cascade = {“remove”})会更好地触发事件,但是有可能在不更换@Join注释中的级联的情况下这样做吗?
答案 0 :(得分:2)
正如here所解释的那样正常:在doctrine2中,无论您使用ORM还是ODM,数据库级别配置的级联都不会引发生命周期事件。因此,如果不在@Join注释中替换级联,则无法实现