【发布时间】:2014-06-10 08:18:17
【问题描述】:
当我尝试使用原则删除实体时,它会为已删除的实体运行新的 INSERT 语句。
设置如下:
表 1:文件 表 2:图库 表 3:gallery_media
File 是一个独立的表格,用于跟踪上传的文件详细信息。 Gallery 也是一个独立的表,用于存储画廊的信息。 gallery_media 是一个将文件与画廊相关联的动名词(多对多)表。
假设表 1 & 2 有 id 字段,表 3 有 fileId 和 galleryId 字段。
我的教义代码是这样的(我正在使用 Symfony2):
$this->em->remove($filentity);
$this->em->flush();
现在当我运行代码时;文件实体将被删除,并且删除操作将级联,这意味着关联的 gallery_media 条目也将被删除。但突然间,被删除的实体重新出现在数据库中。
我的 MySQL 日志显示以下查询按给定顺序运行:
START TRANSACTION
DELETE FROM file WHERE id = '126'
commit
START TRANSACTION
INSERT INTO file (name) VALUES ('someFileName')
UPDATE gallery SET date_updated = '2014-06-10 09:53:38', count_media = 11 WHERE id = 14
我的完整代码是:
$this->em->remove($filentity);
$this->em->flush();
$newCount= $galleryEntity->getCountMedia() - 1;
$galleryEntity->setCountMedia($newCount);
$this->em->persist(galleryEntity);
$this->em->flush();
我相信实体在移除后没有分离。但我不确定。也许实体管理器实例混淆了......
有没有人遇到过类似的问题?如果是这样,我将不胜感激。
谢谢。
【问题讨论】:
-
“gallery_media”表是 Doctrine 自动创建的,因为“文件”和“画廊”之间存在多对多关联?
-
__construct()方法中是否有任何关联实体,当你持久化一个新的画廊实体时,它会被级联插入? -
Pete 我已经手动创建了所有实体。丹好电话:)但不,我不:/
标签: php mysql symfony doctrine-orm persist