Câu trả lời:
Bạn có thể đang lưu một tập hợp của nhiều đối tượng được kết nối. Xác định đối tượng nào trong số này là gốc , ví dụ:
[order] <------ this is the root
/ | \
billing_address | shipping_address
|
order_items
Thêm logic cập nhật trong mô hình tài nguyên của root và sử dụng một giao dịch ở đó.
Nếu bạn muốn lưu nhiều phiên bản mô hình, bạn có thể sử dụng mô hình giao dịch. Tiêm một nhà máy giao dịch \Magento\Framework\DB\TransactionFactory
trong mô hình tài nguyên của bạn và sử dụng nó như thế này:
$saveTransaction = $this->transactionFactory->create();
$saveTransaction->addObject($objectToSave);
$saveTransaction->addObject($otherObjectToSave);
...
$saveTransaction->save();
Cam kết hoặc rollback được tự động xử lý theo save()
phương pháp.
Ngoài ra, bạn có thể sử dụng các giao dịch trực tiếp (nếu bạn sử dụng các cập nhật cơ sở dữ liệu khác ngoài $model->save()
:
$connection = $this->getConnection();
$connection->beginTransaction();
try {
...
$connection->commit();
} catch (\Exception $e) {
$connection->rollBack();
throw $e;
}
save()
phương thức của các mô hình tài nguyên, vì vậy mỗi phương thức sẽ được lưu trong các giao dịch riêng biệt. Các kho lưu trữ thường chứa một số logic xác thực, do đó thường được khuyến nghị sử dụng chúng thay vì cácsave()
phương thức mô hình tài nguyên đơn giản .