【问题标题】:Strange error "A new entity was found through the relationship" in Symfony on production environmentSymfony 在生产环境中出现奇怪的错误“通过关系发现了一个新实体”
【发布时间】:2015-08-19 14:37:26
【问题描述】:

我对 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个订单会产生这个错误,我们不会保存ordersProducts。

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

此外,生产环境中出现了与大量服务器一起工作的错误。在具有一台服务器的开发人员环境中,它运行良好。

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

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

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

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

附言php5.4; symfony2; mysql

【问题讨论】:

    标签: mysql symfony doctrine entity


    【解决方案1】:

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

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

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

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

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

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

    这应该可以解决元素 n°5001 的问题,并防止之前的 5000 个元素出错。

    Doctrine - Working with associations

    【讨论】:

      【解决方案2】:

      我有一种奇怪的感觉,这可能是与数据库相关的问题。如果您尚未将实体的关系配置为cascade=persist,则通常会引发您收到的异常。但我怀疑情况是否如此。

      不过,根据您所说的,在我看来您可能有 2 个数据库(即主数据库和从属数据库)。如果是这种情况,当您最终到达www2 - initialized order (and saved it in db with orderProducts) 时,您的奴隶可能不会完全同步。因此,您最终拥有 1 个包含已保存的 Order 的从站和 1 个缺少此 Order 的从站(尚未同步)。当您尝试对 Product 执行操作时,它与尚未插入当前从站的 Order 关联,因此您会收到该异常消息。

      设置双向cascade=persist 可能会有所帮助:

      1. 在您的Order->productsCollection
      2. 在您的Product->order

      虽然我不确定这是否会使数据库不同步。(如果有多个数据库是开始的情况)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多