这就是我在preUpdate中所做的事情
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');
}
}
这是我有错误的地方
FatalErrorException:错误:最长执行时间为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();
答案 0 :(得分:0)
我认为你不能这样做,因为托管实体的输出包含递归字段。
查看https://github.com/schmittjoh/JMSSerializerBundle :)并记录序列化版本;)
答案 1 :(得分:0)
为此,我将新创建的实体存储在EventSuscriber中的私有数组中。然后在suscriber的onFlush部分,如果该数组长度大于0,我将使用foreach循环保持它们。然后,在foreach循环之外,我清除数组(这对于防止无限循环非常重要)并最终调用flush。