这就是我在更新前所做的
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 循环之外,我清除数组(这对于防止无限循环非常重要),最后调用刷新。