Symfony - doctrine PreUpdateEventArgs错误

时间:2014-07-17 11:48:59

标签: php symfony orm doctrine sonata-admin

我正在与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"},那就没有区别了。

1 个答案:

答案 0 :(得分:1)

如果我重新加载Invoice对象,问题接缝将被修复:

$invoice = $manager->getRepository('BundleNameHere:Invoice')->findOneById($invoice->getId());

但是这有点奇怪,我作为参数获取的对象与我重新加载它在存储库中获得的对象相同。

我想现在这样做了,它解决了我的问题,但欢迎任何关于这种情况发生的想法。