首页 > 解决方案 > Symfony 总是在我的自定义控制台命令中抛出 OptimisticLockException

问题描述

我在控制台命令中的代码

构造函数

private $em;

public function __construct(EntityManagerInterface $em, $name = null)
{
    parent::__construct($name);

    $this->em = $em;
}

...并且在我的执行命令中总是 OptimisticLockException

protected function execute(InputInterface $input, OutputInterface $output) {

$repository = $this->em->getRepository(ProductData::class);
$product = $repository->findOneBy(array('code' => $data[0]));

$product->setName($data[1]);
$product->setDesc($data[2]);
$product->setStockLevel((float)$data[3]);
$product->setPrice((float)$data[4]);
$this->em->flush();    }

我需要帮助

标签: symfonydoctrine

解决方案


问题是如果模型有 @ORM\HasLifecycleCallbacks () 并且当我更新模型时,函数

public function onPreUpdate()
{
    $this->setTimestamp(new \DateTime('now'));
}

工作不正确。更新函数不仅在 id 上查找模型,还在时间戳上查找模型。为什么?我不知道:

UPDATE tblProductData SET strProductName = ?, stmTimestamp = CURRENT_TIMESTAMP WHERE intProductDataId = ? AND stmTimestamp = ? ["qqqq",8,"2018-05-10 15:44:21"]

因此出现了这样的错误,因为没有找到模型


推荐阅读