当我尝试使用原则删除实体时,它会为已删除的实体运行新的 INSERT 语句。
设置如下:
表 1:文件 表 2:画廊 表3:gallery_media
文件是一个独立的表,用于跟踪上传的文件详细信息。 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();
我相信这表明实体在移除后不会分离。但我不确定。也许实体管理器实例混淆了......
有人遇到过类似的问题吗?如果是这样,我将不胜感激一些反馈。
谢谢。
最佳答案
我的猜测是,$galleryEntity
包含之前删除的文件对象。当调用 persist 时,实体管理器会看到该文件尚未持久化(因为它之前已被删除)并插入它。尝试在 $galleryEntity
中查找 $fileEntity
并手动将其删除,或者 $em->refresh($galleryEntity)
或检索 删除文件后,从实体管理器中获取 $galleryEntity
,以确保它不是“脏文件”。
关于php - Doctrine 删除 Symfony2 中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24136090/