php - Doctrine 删除 Symfony2 中的问题

标签 php mysql symfony doctrine-orm persist

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

相关文章:

php - 用户可以在 PHP 中更改 $_SESSION 的值吗?

php - microtime() 的准确度如何?

php - MySQL日期时间使用PHP PDO显示0000

php - 搜索城市以查找所选类别

mysql - 如何修复 opencart 中的 MySQL 错误?

php - Symfony2 app.request.get 在呈现的 Twig 模板中返回 null

php - ini 文件未正确准备好

symfony - 在 Symfony2 中生成具有不同语言环境的 url

哎呀!发生错误服务器在生产中返回 "404 Not Found"

php - Perl pack() 函数和 "B"格式化字符到 Php