Magento2 - 服务层内的数据库事务

时间:2016-05-03 20:01:10

标签: dependency-injection magento2

如何在magento2上的服务层内进行数据库事务?

我需要在服务层上使用事务来通过webservices公开。

2 个答案:

答案 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();
    }