2011-10-01 24 views
5

Zend Framework'ü kullanarak, (1) MySQL veritabanından bir kaydın okunması ve (2) okunduğunu belirtmek için hemen bu kayda tekrar yazmam gerekiyor. Diğer kayıtların veya sorguların (1) ve (2) adımları arasında aynı kayıttan okuyabilmesi veya yazılabilmesini istemiyorum.Zend Framework'deki veritabanı işlemleri: İzole edilmişler mi?

Bu adımlar için bir işlem kullanmayı düşünüyordum. Aşağıdaki yöntemleri kullanırsam, gereksinimlerimi yerine getirir mi? gereksinimi güncellemek için öncelikle öncelikle bunu satır okumak ve münhasıran kilitlemek gerektiğini ise

:

Zend_Db_Adapter_Abstract::beginTransaction() 
Zend_Db_Adapter_Abstract::commit() 
Zend_Db_Adapter_Abstract::rollBack() 

cevap

10

Eğer işlemleri yayınlayacak tablolar için InnoDB engine kullanıyor önvarsayan SELECT ... FOR UPDATE sorgusu vermelisiniz. gibi bir şey:

$db->beginTransaction(); 
try 
{ 
    $select = $db->select() 
       ->forUpdate() // <-- here's the magic 
       ->from(
        array('a' => 'yourTable'), 
        array('your', 'column', 'names') 
       ) 
       ->where('someColumn = ?', $whatever); 

    $result = $this->_adapter->fetchRow($select); 

    /* 
     alter data in $result 
     and update if necessary: 
    */ 
    $db->update('yourTable', $result, array('someColumn = ?' => $whatever)); 

    $db->commit(); 
} 
catch(Exception $e) 
{ 
    $db->rollBack(); 
} 

Veya sadece tabii $db üzerine 'ham' SELECT ... FOR UPDATE ve UPDATE sorun SQL deyimleri.

+0

Güncelleme yapmak çok önemlidir. Bir kuyruğu uygulayan benzer bir durum vardı. Bahşiş için teşekkürler. – cr125rider