Symfony 如何使用命令将读取锁定在MAX()值上?
我有一个表,当我写新行时,我得到Symfony 如何使用命令将读取锁定在MAX()值上?,symfony,doctrine-orm,locking,Symfony,Doctrine Orm,Locking,我有一个表,当我写新行时,我得到MAX(grouping\u id)的值并添加一个。然后,我保存了一组具有相同grouping\u id值的行。问题是在分组\u id中有一些冲突。两组独立的数据从MAX()读取了相同的值。我的代码如下所示: $em->transactional(function($em) use ($data) { $max_grouping_id = $em->getRepository('FormData') -&
MAX(grouping\u id)
的值并添加一个。然后,我保存了一组具有相同grouping\u id
值的行。问题是在分组\u id
中有一些冲突。两组独立的数据从MAX()
读取了相同的值。我的代码如下所示:
$em->transactional(function($em) use ($data) {
$max_grouping_id = $em->getRepository('FormData')
->createQueryBuilder('fd')
->select('MAX(fd.grouping_id)')
->getQuery()
->getSingleScalarResult()
;
settype($max_grouping_id, 'int');
$grouping_id = $max_grouping_id+1;
foreach($data as $formdata) {
$formdata->setGroupingId($grouping_id);
$em->persist($formdata);
}
});
try {
$em->flush();
} catch(\Exception $e) {
return $this->redirect(/* */);
}
我已经为$formdata
实体设置了所有其他数据
因此,我需要在MAX(fd.grouping\u id)
的值上锁定读取,以便在我完成刷新formdata实体之前,并发请求将无法读取该值。但是否可以锁定计算值?数据库是MySQL InnoDB
我只遇到过很少的碰撞,但它们从未减少过。此外,我们还感谢其他建议的解决碰撞问题的方法。可能会将随机散列与
分组\u id一起添加或替换。为什么不使用自动递增的id?我需要几个具有相同分组\u id的行。主键(不是grouping_id)是自动递增的,我想如果可以使用doctor/MySQL有两个自动递增的列,那么我可以先保存一行,然后保存其余的。如果前一个增量值存在几次,它是否会正确增量?确定。对不起,我不知道有两个纵队。也许您可以使用具有多人关系的组
实体来管理您的组。