2011-02-02 4 views
10

Magento 모듈에서 작업 중이며 일련의 모델 저장을 롤백 할 수 있는지 알아야합니다.Magento 데이터베이스 트랜잭션 예외 및 롤백

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

내 문제는 이러한 모델의 예외를 던질 때마다, 내가 수동으로 삭제 MySQL을로 가서 필요가있다 : 기본적으로, 나는 다른 후 하나를 저장해야 내 모듈에서 여러 플러스 다섯 개 가지 모델을 가지고 저장된 모든 행 이것은 매우 비생산적입니다.

Magento에는 내 컨텍스트에서 액세스 할 수있는 롤백 절차가 없습니다. 예를 들어, Mage_Core_Model_Abstract을보고 save 메소드에서 롤백 메커니즘이 모두 보호됩니다.

제 질문은 Magento에서 알고 있어야하는 데이터베이스 트랜잭션을 수행하기위한 몇 가지 모범 사례가 있습니까?

답변

13

다음은 핵심 코드에서 사용 된 것으로, 주문한 것과 같습니다.

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

core/resource_transaction 객체는 젠토 객체를 추가하고, 그들에 저장 질량을 수행 할 수 있습니다. 시도해 보시고, 의견에서 당신이 어떻게 작용하는지, 듣지 않는지 듣고 싶습니다.

+0

정확하게 작동했습니다. 감사. 또한 모델에 데이터를 추가해야하는 경우 트랜잭션을 다시 저장할 수 있음을 발견했습니다. 예를 들어 상점 모델에 대해 website_id 및 store_group_id를 설정해야합니다. 첫 번째 트랜잭션 저장 후 모델이 기본 키로 업데이트됩니다. 그런 다음 다시 저장하면 행이 업데이트됩니다. –

관련 문제