2011-02-02 41 views
10

Tôi đang làm việc trên một mô-đun Magento và cần phải biết nếu có thể quay trở lại một loạt các mô hình tiết kiệm. Về cơ bản, tôi có năm mô hình cộng với một vài từ mô-đun của tôi mà tôi cần phải lưu một sau khi khác:Magento bắt ngoại lệ và quay lại các giao dịch cơ sở dữ liệu

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

Vấn đề của tôi là bất cứ khi nào bất kỳ của các mô hình này ném một ngoại lệ, tôi cần phải đi vào MySQL và tự xóa tất cả các hàng đã được lưu. Điều này rất không hiệu quả.

Tôi khá chắc chắn rằng Magento không có quy trình quay lại mà tôi có thể truy cập trong ngữ cảnh của mình. Ví dụ, tôi nhìn vào Mage_Core_Model_Abstract và trong phương pháp lưu, các cơ chế rollback đều được bảo vệ.

Vì vậy, câu hỏi của tôi là, có một số thực hành tốt nhất để thực hiện các giao dịch cơ sở dữ liệu trong Magento mà tôi nên biết không?

Trả lời

13

Tôi đã nhìn thấy những điều sau được sử dụng trong mã lõi và có vẻ như chỉ là những gì bạn đã đặt hàng.

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

Đối tượng core/resource_transaction cho phép bạn thêm đối tượng Magento và thực hiện lưu trên khối lượng. Hãy thử một lần, và tôi rất thích nghe điều này, hay không, làm việc cho bạn trong các bình luận.

+0

Điều này hoạt động chính xác. Cảm ơn. Tôi cũng thấy rằng tôi có thể lưu lại giao dịch nếu tôi cần thêm nhiều dữ liệu hơn vào các mô hình. Ví dụ, tôi cần phải đặt website_id và store_group_id cho mô hình cửa hàng. Sau khi giao dịch đầu tiên được lưu, mô hình sẽ được cập nhật bằng khóa chính. Sau đó, tôi lưu lại và các hàng được cập nhật. –

Các vấn đề liên quan