我正在与Sonata Admin合作,我正在尝试更新一个与之关联的子实例的实体实例,并且出现以下错误。
ContextErrorException:Catchable Fatal Error:传递给的参数3 Doctrine \ ORM \ Event \ PreUpdateEventArgs :: __ construct()必须是 type array,null给定,调用 ROOT \供应商\原则\ ORM \ LIB \原则\ ORM \ UnitOfWork.php 在第995行并定义于 ROOT \供应商\原则\ ORM \ LIB \原则\ ORM \事件\ PreUpdateEventArgs.php 第47行
换句话说,我正在尝试保存一个名为invoice的对象,并且我正在保存与发票关联的订单对象。
这是我的代码:
$invoice = ....; //I get this as a parameter to the method
$manager = $this->getDoctrine()->getManager();
$invoice->setStatus('validated');
foreach ($invoice->getOrders() as $order) {
/** @var Order $order */
$order->setOrderStatus('invoiced');
}
$manager->persist($invoice);
$manager->flush();
$manager->clear();
$ orders会员注释为
/**
* @ORM\OneToMany(targetEntity="Order", mappedBy="invoice", cascade={"persist"}, orphanRemoval=false)
*/
$orders;
奇怪的是,如果我只有一个$ order对象与发票相关联,一切运行顺利,但当至少有2个东西一切都在繁荣时。
经过一些调试后,我发现它试图保存第二个$ order对象两次,第二次崩溃。
我看到了Symfony2 postUpdate listener not working。那个人没有答案,对我来说看起来不一样(但不确定)。
[编辑]
如果我有cascade={"persist"}
,那就没有区别了。
答案 0 :(得分:1)
如果我重新加载Invoice对象,问题接缝将被修复:
$invoice = $manager->getRepository('BundleNameHere:Invoice')->findOneById($invoice->getId());
但是这有点奇怪,我作为参数获取的对象与我重新加载它在存储库中获得的对象相同。
我想现在这样做了,它解决了我的问题,但欢迎任何关于这种情况发生的想法。