Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Doctrine2 ORM wybierz do aktualizacji

Najwyraźniej Doctrine 2 używa BLOKADA W TRYBIE WSPÓŁDZIELONYM z pesymistyczną blokadą odczytu dla MySQL, co nie jest tym samym, co WYBIERZ DO AKTUALIZACJI.

Patrząc na źródła aktualnego wydania stabilnego, wydaje się, że nie ma natywnego sposobu na zrobienie tego w Doctrine (nie jestem pewien, dlaczego zespół Doctrine wybrał ten typ blokady dla MySQL).

Użyłem natywnego SQL jako obejście, które można zmapować na tradycyjne encje, tak jak w przypadku 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();

Aktualizacja

Jak zauważył Benjamin, PESSIMISTIC_WRITE jest tym, czego szukasz.

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

Bez DQL

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

Ponadto, aby to zadziałało, musisz użyć instrukcji wewnątrz transakcji.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. czy dobrym zwyczajem jest używanie mysql_free_result($result)?

  2. Odkryj sortowanie kolumny MySQL

  3. Jak połączyć R z MySQL lub jak zainstalować pakiet RMySQL?

  4. Jak połączyć się z wieloma bazami danych na jednej stronie PHP?

  5. Przewodnik po projektowaniu bazy danych dla systemu sieci społecznościowych w MySQL