Symfony всегда выбрасывает OptimisticLockException в мою пользовательскую консольную команду - PullRequest
0 голосов
/ 10 мая 2018

Мой код в консольной команде

Конструктор

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();    }

Мне нужна помощь, пожалуйста

1 Ответ

0 голосов
/ 11 мая 2018

Проблема заключалась в том, что если модель имеет @ORM \ HasLifecycleCallbacks () И когда я обновил модель, функция

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

работают некорректно. Функция обновления ищет модель не только по идентификатору, но и по метке времени. Зачем? Я не знаю:

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

И поэтому возникла такая ошибка, потому что модель не была найдена

...