我有一个由许多应用程序访问的产品表,每个应用程序都有几个用户。我想避免冲突,但在我检测到的一小部分代码中可能会发生冲突。
$item = $em->getRepository('MyProjectProductBundle:Item')
->findOneBy(array('product'=>$this, 'state'=>1));
if ($item)
{
$item->setState(3);
$item->setDateSold(new \DateTime("now"));
$item->setDateSent(new \DateTime("now"));
$dateC = new \DateTime("now");
$dateC->add(new \DateInterval('P1Y'));
$item->setDateGuarantee($dateC);
$em->persist($item);
$em->flush();
//...after this, set up customer data, etc.
}
一个选项可以是 make 2persist()
和flush()
,第一个选项是在状态更改之后,但在这样做之前,我想知道是否有一种方法可以提供更多保证。
我不认为交易是一种解决方案,因为该过程实际上涉及许多其他操作,因此将它们包装在交易中会迫使许多回滚和失败的销售,使情况变得更糟。
Tha 数据库是 Postgress。
还有其他想法吗?