जाहिर है, सिद्धांत 2 MySQL के लिए निराशावादी रीड लॉक के साथ साझा मोड में लॉक का उपयोग करता है, जो अद्यतन के लिए चयन के समान नहीं है।
वर्तमान स्थिर रिलीज के स्रोतों को देखते हुए, ऐसा लगता है कि सिद्धांत में ऐसा करने का कोई मूल तरीका नहीं है (मुझे यकीन नहीं है कि सिद्धांत टीम ने MySQL के लिए उस प्रकार के लॉक को क्यों चुना)।
मैंने मूल SQL का उपयोग वर्कअराउंड के रूप में किया, जिसे पारंपरिक संस्थाओं में मैप किया जा सकता है, जैसा कि यह DQL के साथ होगा:
<?php
$rsm = new ResultSetMappingBuilder($this->_em);
$rsm->addRootEntityFromClassMetadata('Model_Record_Delivery', 'u');
$query = $this->_em->createNativeQuery("SELECT * FROM delivery WHERE id = :id FOR UPDATE", $rsm);
$query->setParameter("id", $id);
$result = $query->getOneOrNullResult();
अपडेट करें
जैसा कि बेंजामिन ने बताया है, PESSIMISTIC_WRITE वह है जिसे आप ढूंढ रहे हैं।
डीक्यूएल के साथ
<?php
$query = $this->em->createQuery('SELECT e
FROM Application\Model\Entity\MyEntity e
WHERE e = :id');
$query->setParameter("id", $id);
$query->setLockMode(\Doctrine\DBAL\LockMode::PESSIMISTIC_WRITE);
डीक्यूएल के बिना
<?php
$entity = $em->find('Application\Model\Entity\MyEntity', $id, \Doctrine\DBAL\LockMode::PESSIMISTIC_WRITE);
साथ ही, लेन-देन को काम करने के लिए आपको स्टेटमेंट के अंदर स्टेटमेंट का उपयोग करना होगा।