mysql - Symfony 在生产环境中的奇怪错误 "A new entity was found through the relationship"

标签 mysql symfony doctrine entity

我有 Doctrine 常见错误的奇怪错误:

CRITICAL: Uncaught PHP Exception Doctrine\ORM\ORMInvalidArgumentException: "A new entity was found through the relationship 'Isc\CoreBundle\Entity\Orders#ordersProducts' that was not configured to cascade persist operations for entity: Isc\CoreBundle\Entity\OrdersProducts@000000000888648200000000198a79af

Strangeless 的错误频率很高。我们可以使用该编程代码处理 5000 个订单,并且一切正常。但是第5001个订单会产生这个错误,我们不会保存订单产品。

我用谷歌搜索了解决方案,但我找到的所有内容(如 Doctrine - A new entity was found through the relationshiphttps://groups.google.com/forum/#!topic/doctrine-user/bdY1QgM4Tu4 等)对我没有帮助。

此外,在生产环境中使用大量服务器时也会出现错误。在具有一台服务器的开发人员环境中,它运行良好。

在日志中它可能看起来像(用户总是有一个 session ID):

  • www1 - 访问过的产品页面
  • www1 - 在购物车中添加了 product1
  • www2 - 在购物车中添加了产品 2
  • www7 - 访问过的购物车
  • www2 - 选择支付宝
  • www2 - 初始化订单(并使用 orderProducts 将其保存在数据库中)
  • www4 - 将数据发送到 paypal 并将用户重定向到付款
  • www3 - 从 Paypal 获取有关付款的请求 - 尝试更新订单和 orderProducts - 此处生成异常

有人遇到过与 Doctrina 类似的问题吗? 这可能是因为我们使用的服务器很少吗?

“好”订单和“坏”订单的编程代码始终相同

附注php5.4; symfony2;数据库

最佳答案

如果错误发生在您的生产服务器上而不是其他服务器上,我认为您的生产服务器上的 MySQL 版本不同。

如果您在每台服务器上都有相同的 MySQL 版本,请尝试在您的生产服务器上编写更新,然后在您的开发服务器上进行更新。

但是,您必须解决这个问题。 该错误表示通过您的 Order#ordersProduct 找到了一个新实体。

要解决此错误,您有两种解决方案:

1) - 使用以下方法在您的操作中保留新实体:$em->persist($theCreatedEntity)

2) - 在实体映射中添加 cascade={"persist"}( child 或 parent ,我不知道你使用的是哪种关系)。

这应该可以解决第 5001 个元素的问题,并防止前面 5000 个元素的错误。

参见 Doctrine - Working with associations

关于mysql - Symfony 在生产环境中的奇怪错误 "A new entity was found through the relationship",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32098568/

相关文章:

html - 从 Twig 模板生成 pdf 文件

Symfony2 : clear cache don't generate required file EntityManager_XXXX. php(用于 Doctrine )

php - Symfony2 : how to get all entities of one type which are marked with "EDIT" ACL permission?

MySQL在临时表中创建任意日期或数字列表?

MySQL - 将来自同一个表的两个元素链接到另一个表中

php - 如何使用 Composer 创建基于特定版本 Symfony 的项目?

symfony - 如何将特定文件添加到 assetic 中?

php - 如何选择 ORM

php - MySQL从同一个表中选择两行

mysql - crontab 命令未运行