Mysql
 sql >> база данни >  >> RDS >> Mysql

Doctrine2 ORM изберете за актуализиране

Очевидно Doctrine 2 използва ЗАКЛЮЧВАНЕ В СПОДЕЛЕН РЕЖИМ с песимистично заключване на четене за MySQL, което не е същото като SELECT FOR UPDATE.

Разглеждайки източниците на текущата стабилна версия, изглежда, че няма естествен начин за това в Doctrine (не съм сигурен защо екипът на Doctrine избра този тип заключване за 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 е това, което търсите.

С 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);

Без DQL

<?php
$entity = $em->find('Application\Model\Entity\MyEntity', $id, \Doctrine\DBAL\LockMode::PESSIMISTIC_WRITE);

Освен това трябва да използвате изявлението в транзакция, за да го накарате да работи.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. как работи индексирането на B-дърво в mysql

  2. Изберете ограничение за уникални записи с N реда

  3. JDBC Създаване на таблица Пример за използване

  4. Как да коригирам MySQL грешка 1064

  5. Как да нулирате/промените MySql root парола на командния ред в ubuntu linux