更新前事件后无法闪烁



这就是我在更新前所做的

 public function preUpdate(LifecycleEventArgs $args)
{
    $entity = $args->getEntity();
    if ($entity instanceof Order) {
        if ($args->hasChangedField('status') && $args->getNewValue('status') == 'stock') {
            $this->container->get('activity_logger')->writeLog($entity, 'purchase');
        }
    }

这是我有错误的地方

致命错误异常:错误:最大执行时间为 60 秒 在/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php第 2498 行中超出

public function writeLog ($object, $comment)
    {
        $entity = new Stock();
        $entity->setCategory($object->getIsotope()->getCategory()->getId());
        $entity->setComment($comment);
        $entity->setDate(new DateTime('now'));
        $entity->setUser($object->getUser()->getId());
        $entity->setChange(TRUE);

        $this->em->persist($entity);
        $this->em->flush();
}

有没有另一种方式存储新实体?

找到不是很好的解决方案(手动执行)它的保存并且不要触摸事件

$sql = "INSERT INTO table (field1, field2) VALUES ('foo', 'var')";
$stmt = $em->getConnection()->prepare($sql);
$stmt->bindValue('invoice', $invoiceId);
$result = $stmt->execute();
我认为

您无法这样做,因为托管实体的输出包含递归字段。

看看 https://github.com/schmittjoh/JMSSerializerBundle :)并记录序列化版本;)

为此,我将新创建的实体存储在 EventSuscriber 的私有数组中。然后在 suscriber 的 onFlush 部分,如果该数组长度大于 0,我用 foreach 循环保留它们。然后,在 foreach 循环之外,我清除数组(这对于防止无限循环非常重要),最后调用刷新。

相关内容

  • 没有找到相关文章

最新更新