Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Doctrine2 ORM chọn để cập nhật

Rõ ràng, Doctrine 2 sử dụng LOCK IN SHARED MODE với khóa đọc Pessimistic cho MySQL, không giống như SELECT FOR UPDATE.

Nhìn vào các nguồn của bản phát hành ổn định hiện tại, có vẻ như không có cách nào nguyên bản để làm như vậy trong Doctrine (tôi không rõ tại sao nhóm Doctrine lại chọn loại khóa đó cho MySQL).

Tôi đã sử dụng SQL gốc làm giải pháp thay thế, có thể được ánh xạ tới các thực thể truyền thống, giống như với 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();

Cập nhật

Như Benjamin đã chỉ ra, PESSIMISTIC_WRITE là thứ bạn đang tìm kiếm.

Với 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);

Không có DQL

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

Ngoài ra, bạn phải sử dụng câu lệnh bên trong một giao dịch để làm cho nó hoạt động.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CakePHP - chạy truy vấn cuối cùng

  2. Tham gia bên trong Nhiều đến Nhiều Bảng với Bộ lọc Trong MySQL

  3. Cơ sở dữ liệu bị lỗi trong nguồn dữ liệu Jboss

  4. Tham số số 2 không phải là tham số OUT

  5. SQL - Tìm từ hoàn chỉnh trong văn bản