如何在magento2上的服务层内进行数据库事务?
我需要在服务层上使用事务来通过webservices公开。
答案 0 :(得分:1)
问题不是很清楚,但你应该不在Web服务类中实现数据库事务。
使用_Repository类,在其构造函数中注入Resource Model类,其中包含将数据保存到数据库中的代码。
来自核心Magento的示例:通过Web服务API保存客户组
<route url="/V1/customerGroups/:id" method="PUT">
<service class="Magento\Customer\Api\GroupRepositoryInterface" method="save"/>
<resources>
<resource ref="Magento_Customer::group"/>
</resources>
</route>
答案 1 :(得分:0)
交易支持位于\Magento\Framework\DB\Adapter\AdapterInterface
实施中(\Magento\Framework\DB\Adapter\Pdo\Mysql
)。您可以使用DI:
\Magento\Framework\App\ResourceConnection
对象获取此对象
/** @var \Magento\Framework\DB\Adapter\AdapterInterface */
protected $_conn;
/** @var \Magento\Framework\App\ResourceConnection */
protected $_resource;
public function __construct(
\Magento\Framework\App\ResourceConnection $resource
) {
$this->_resource = $resource;
$this->_conn = $resource->getConnection(); // get default connection
}
然后您可以使用数据库事务进行连接:
try {
$this->_conn->beginTransaction();
// ...
$this->_conn->commit();
} catch (\Exception $e) {
$this->_conn->rollBack();
}