2014-12-16 27 views
5

ben zend frameworkMagento birden veritabanı işlemleri

$db->beginTransaction(); 

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

bunu nasıl yapılacağını biliyorum işlemek ama magento modeliyle yapmak istiyoruz, bir şeyler bunlardan herhangi biri başarısız olursa tüm uygulama/kod/çekirdek/Büyücü/çekirdek/Mod de

cevap

5

Bak geri alındı ​​

Teşekkür edilmelidir ardından kaydetmek için el/Kaynak/Transaction.php

Bu model, başka bir Modelin işlemdeki nesneler olarak eklemesine izin verir. Kaydetme sırasında, eklenen her nesne için $object->save() numaralı telefonu arayın. Bir şey başarısız olursa, her nesne için $object->getResource()->rollBack()'u arayın. Ayrıca, addCommitCallback(array($object, 'callbackFunctionName')) aracılığıyla geri arama geri bildirimleri ekleyebilirsiniz.

Eğer işlem silmek gerekiyorsa, her nesne için $object->delete() yerine $object->save() dediğimiz bu durumda $transaction->delete() yerine $transaction->save() diyoruz.

Örnek: INSERT için

try { 
    $transaction = Mage::getModel('core/resource_transaction') 
          ->addObject(Mage::getModel('modulename/table1')) 
          ->addObject(Mage::getModel('modulename/table2')) 
          ->addObject(Mage::getModel('modulename/table3')); 

    $transaction->save(); 
} catch (Exception $e) { 
    echo $e->getMessage(); 
} 
+0

Teşekkürler ToxaBse, 'modulename/table1' dosyasını kaydetmek ve 'modulename/table2' dosyasını güncellemek ve 'modulename/table3' komutunu silmek istermiyiz, bunu nasıl başarabilirim? – Ahmed

+0

Bir işlemde kaydetme ve silme eylemlerini kullanmadım, ancak sonraki satırı eklemeyi deneyin: $ transaction-> addCommitCallback (array (Mage :: getModel ('modulename/table2'), 'delete')); – ToxaBes

1

, DELETE ve tek bir işlemde GÜNCELLEME (Yorumlarınız göre) aşağıda deneyin

<?php 

$id1 = 1; //update id 
$id2 = 2; //delete id 
$data = array('title'=>'New Title','content'=>'Hello, there..!','status'=>1); 
$update = array('title'=>'My title', 'content'=>'Hi, there..!', 'status'=>1); 

try { 
    $transaction = Mage::getModel('core/resource_transaction') 
          ->addObject(Mage::getModel('modulename/table1')->load($id1)->addData($update)); 
          ->addObject(Mage::getModel('modulename/table2')->setId($id2)->delete()); 
          ->addObject(Mage::getModel('modulename/table3')->setData($data)); 

    $transaction->save(); 
} catch (Exception $e) { 
    echo $e->getMessage(); 
} 

Bu test etmedi. Sadece kendi riskini dene. Sorun, buradaki tüm db-işlemi için son ekleme kimliğini alamıyor olmanızdır. delete(), save() numaralı telefonu aramak zorunda değildir. Ancak INSERT ve UPDATE yöntemini son olarak save() aramanız gerekir. Lütfen sonuçları güncelleyin veya güncellemeyin.

+0

Bu benim için çalışmadı. Benzer bir soruyu http://stackoverflow.com/questions/13478840/how-to-save-and-delete-in-same-transaction adresinde benzer bir soruya benzer (ama başarılı) bir cevap var. –