Wie machen Datenbanktransaktionen innerhalb der Serviceebene auf Magento2?Magento2 - Datenbanktransaktionen innerhalb der Serviceebene
Ich brauche Transaktion auf Service-Layer, um durch Webservices verfügbar zu machen.
Wie machen Datenbanktransaktionen innerhalb der Serviceebene auf Magento2?Magento2 - Datenbanktransaktionen innerhalb der Serviceebene
Ich brauche Transaktion auf Service-Layer, um durch Webservices verfügbar zu machen.
Transaktionsunterstützung ist in \Magento\Framework\DB\Adapter\AdapterInterface
Implementierung (\Magento\Framework\DB\Adapter\Pdo\Mysql
). Sie können dieses Objekt aus \Magento\Framework\App\ResourceConnection
Objekt mit DI erhalten:
/** @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
}
dann können Sie Datenbanktransaktion für die Verbindung verwenden:
try {
$this->_conn->beginTransaction();
// ...
$this->_conn->commit();
} catch (\Exception $e) {
$this->_conn->rollBack();
}
Die Frage ist nicht ganz klar, aber Sie sollten nicht Datenbank-Transaktion implementieren innerhalb der Web-Service-Klasse.
Verwenden Sie die _Repository-Klassen, injizieren Sie in den Contructor die Resource Model-Klasse, die den Code für persistente Daten in der Datenbank enthalten.
Beispiel von Kern Magento: eine Kundengruppe über Web-Service-API Speichern
<route url="/V1/customerGroups/:id" method="PUT">
<service class="Magento\Customer\Api\GroupRepositoryInterface" method="save"/>
<resources>
<resource ref="Magento_Customer::group"/>
</resources>
</route>