我对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
奇怪的是错误频率。我们可以使用该编程代码处理5000个订单,一切都会正常工作。但是第5001个订单会产生这个错误,我们不会保存订单产品。
我用google搜索解决方案,但我找到的所有内容(例如Doctrine - A new entity was found through the relationship,https://groups.google.com/forum/#!topic/doctrine-user/bdY1QgM4Tu4等)都没有帮助我。
此外,在生产环境中发生了许多服务器的错误。在具有一台服务器的开发人员环境中,它运行良好。
在日志中它看起来像(用户总是有一个会话ID):
有没有人遇到与Doctrina类似的问题? 这可能是因为我们使用的服务器很少吗?
" good"的编程代码订单和"坏"永远相同
P.S。 php5.4; Symfony2的; MySQL的
答案 0 :(得分:1)
如果生产服务器上发生错误而非其他服务器发生错误,我认为您的生产服务器上有不同版本的MySQL。
如果每台服务器上都有相同的MySQL版本,请尝试在生产服务器上进行编辑器更新,然后在开发服务器上进行更新。
但是,你必须解决这个问题。 该错误表示通过您的订单#ordersProduct找到了一个新实体。
要解决此错误,您有两种解决方案:
1) - 使用cascade={"persist"}
2) - 在您的实体(孩子或父母,我不知道您正在使用哪种关系)的映射中添加String code = "<div> style="width: 3%" </div>"
。
这应解决元素n°5001的问题,并防止5000个先前元素的错误。
答案 1 :(得分:0)
我有一种奇怪的感觉,这可能是数据库相关的问题。如果您尚未将实体的关系配置为cascade=persist
,则通常会抛出您收到的例外情况。但我怀疑是这样的。
根据您的说法,在我看来,您可能拥有2个数据库(即主服务器和从服务器)。如果是这种情况,那么当您最终到达www2 - initialized order (and saved it in db with orderProducts)
时,您的奴隶可能无法完美同步。因此,您最终有一个包含已保存的Order
和1个从属的奴隶,其中Order
缺失(尚未同步)。当您尝试对Product
执行操作时,它与尚未插入当前从属的Order
关联,因此您会收到该异常消息。
可能有用的是设置双向cascade=persist
:
Order->productsCollection
Product->order
虽然我不确定这是否会导致数据库失去同步。(如果有多个数据库就是这种情况)