Blijkbaar gebruikt Doctrine 2 LOCK IN SHARED MODE met Pessimistic read lock voor MySQL, wat niet hetzelfde is als SELECT FOR UPDATE.
Kijkend naar de bronnen van de huidige stabiele release, lijkt het erop dat er geen native manier is om dit te doen in Doctrine (ik weet niet zeker waarom het Doctrine-team dat type slot voor MySQL heeft gekozen).
Ik gebruikte native SQL als tijdelijke oplossing, die kan worden toegewezen aan de traditionele entiteiten, zoals het zou zijn met 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();
Bijwerken
Zoals Benjamin heeft opgemerkt, is PESSIMISTIC_WRITE wat u zoekt.
Met DQL
<?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);
Zonder DQL
<?php
$entity = $em->find('Application\Model\Entity\MyEntity', $id, \Doctrine\DBAL\LockMode::PESSIMISTIC_WRITE);
U moet ook het afschrift in een transactie gebruiken om het te laten werken.