避免衝突我有許多應用程序accesed產品表,在每一個幾個用戶。我想避免碰撞,但是在我檢測到的很小一部分代碼中,可能會發生碰撞。學說:在更新
$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.
}
一種選擇是讓2 persist()
和flush()
,只是狀態改變後的第一個,但這樣做之前,我想知道是否有一種方式,提供了更多的保障。
我不認爲交易是一個解決方案,因爲有參與這一進程所以實際上很多其他的行動,在事務包裹起來會迫使許多回滾和失敗的sellings,使情況變得更糟。
臨屋的數據庫是Postgress。
還有其他想法嗎?
如果你正在從倉庫中堅持它的項目將再次嘗試重新插入。檢索完項目後,您可以更改項目設置,然後您只需調用flush()即可更新它們。如果您試圖保存一個新的,您只需要調用persist()。 – Chausser
我不知道這一點,這將是我的短期解決方案,謝謝 –