在模型事件中调用flush()导致崩溃

时间:2019-08-28 11:01:45

标签: shopware

我正在尝试更新模型事件订户内的属性,但是代码导致Shopware v5.4.6崩溃

我遵循了开发人员文档和论坛中的代码说明

class ModelSubscriber implements EventSubscriber
{
    public function getSubscribedEvents()
    {
        return [
            Events::preUpdate,
        ];
    }
    public function preUpdate(PreUpdateEventArgs $eventArgs)
    {
        $modelManager = $eventArgs->getEntityManager();
        $order        = $eventArgs->getEntity();

        if ( ! ($order instanceof Order)) {
            return;
        }

        if (
            ! $eventArgs->hasChangedField('paymentStatus') &&
            ! $eventArgs->hasChangedField('orderStatus')
        ) {
            return;
        }

        $order->getAttribute()->setNsupdate(1);

        $modelManager->persist($order);
        $modelManager->flush();//crash here

    }
}

属性“ nsupdate”已经创建,其类型为字符串。

我只收到错误“ 0-通信失败”

请问,我的代码有什么问题?

更新: 我尝试过

        $modelManager->persist($order);
        $modelManager->flush($order);

        $orderAttribute = $order->getAttribute();
        $orderAttribute->setNsupdate(1);
        $modelManager->persist($orderAttribute);
        $modelManager->flush($orderAttribute);//crash here

具有相同的崩溃结果。

1 个答案:

答案 0 :(得分:1)

这取决于您使用的事件。

无需在更新前进行刷新。