Answers:
您可能正在保存多个连接对象的集合。确定这些对象中的哪一个是root,例如:
[order] <------ this is the root
/ | \
billing_address | shipping_address
|
order_items
在根的资源模型中添加更新逻辑,并在其中使用事务。
如果要保存多个模型实例,则可以使用事务模型。\Magento\Framework\DB\TransactionFactory
在您的资源模型中注入一个事务工厂,并像这样使用它:
$saveTransaction = $this->transactionFactory->create();
$saveTransaction->addObject($objectToSave);
$saveTransaction->addObject($otherObjectToSave);
...
$saveTransaction->save();
提交或回滚由该save()
方法自动处理。
或者,您可以直接使用事务(如果使用的数据库更新不是$model->save()
:
$connection = $this->getConnection();
$connection->beginTransaction();
try {
...
$connection->commit();
} catch (\Exception $e) {
$connection->rollBack();
throw $e;
}
save()
资源模型的方法,因此它们每个都将保存在单独的事务中。存储库通常包含一些验证逻辑,因此通常建议使用它们而不是普通的资源模型save()
方法。