gpt4 book ai didi

php - Doctrine 删除 Symfony2 中的问题

转载 作者:行者123 更新时间:2023-11-29 07:59:51 24 4
gpt4 key购买 nike

当我尝试使用原则删除实体时,它会为已删除的实体运行新的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com