2011-02-02 18 views
10

Estoy trabajando en un módulo Magento y necesito saber si es posible revertir una serie de guardados de modelo. Básicamente, tengo cinco modelos más varios de mi módulo que necesito para salvar uno tras otro:Magento atrapando excepciones y volviendo atrás las transacciones de la base de datos

admin/role 
admin/user 
core/website 
core/store_group 
core/store 
mymodule/model1 
mymodule/model2 

mi problema es que cada vez que alguno de estos modelos lanzar una excepción, necesito entrar en MySQL y eliminar manualmente todas las filas que se guardaron Esto es muy improductivo.

Estoy bastante seguro de que Magento no tiene un procedimiento de reversión al que pueda acceder en mi contexto. Por ejemplo, miré en Mage_Core_Model_Abstract y en el método de guardar, los mecanismos de reversión están todos protegidos.

Entonces, mi pregunta es, ¿hay alguna mejor práctica para hacer transacciones de bases de datos en Magento que deba tener en cuenta?

Respuesta

13

He visto lo siguiente utilizado en el código central, y parece que es justo lo que pediste.

$transactionSave = Mage::getModel('core/resource_transaction'); 
$transactionSave->addObject($model_one) 
$transactionSave->addObject($model_two) 
$transactionSave->save(); 

El objeto core/resource_transaction le permite añadir objetos de Magento, y llevar a cabo una masa guardar en ellos. Pruébalo, y me encantaría saber cómo funciona, o no funciona, en los comentarios.

+0

Esto funcionó exactamente. Gracias. También descubrí que puedo guardar la transacción nuevamente si necesito agregar más datos a los modelos. Por ejemplo, necesito establecer el id_web y el store_group_id para el modelo de tienda. Después de guardar la primera transacción, el modelo se actualiza con la clave principal. Luego vuelvo a guardar y las filas se actualizan. –

Cuestiones relacionadas