/
githubmirror
/
magento2
Обзор
Документация
Войти
/
githubmirror
/
magento2
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
2.4-develop
lib/internal/Magento/Framework/DB/Transaction.php
193 строки
4 KB
Alexandra Zota
ACP2E-4019: CE copyright updates for 2.4.9-beta1
22 окт 2025, 17:47
22 окт 2025, 17:47
1b769b7
Код
Авторство
О чём код?
<?php /** * Copyright 2014 Adobe * All Rights Reserved. */ declare(strict_types=1); namespace Magento\Framework\DB; /** * DB transaction model * * @api * * @todo need collect connection by name */ class Transaction { /** * Objects which will be involved to transaction * * @var array */ protected $_objects = []; /** * Transaction objects array with alias key * * @var array */ protected $_objectsByAlias = []; /** * Callbacks array. * * @var array */ protected $_beforeCommitCallbacks = []; /** * Begin transaction for all involved object resources * * @return $this */ protected function _startTransaction() { foreach ($this->_objects as $object) { $object->getResource()->beginTransaction(); } return $this; } /** * Commit transaction for all resources * * @return $this */ protected function _commitTransaction() { foreach ($this->_objects as $object) { $object->getResource()->commit(); } return $this; } /** * Rollback transaction * * @return $this */ protected function _rollbackTransaction() { foreach ($this->_objects as $object) { $object->getResource()->rollBack(); } return $this; } /** * Run all configured object callbacks * * @return $this */ protected function _runCallbacks() { foreach ($this->_beforeCommitCallbacks as $callback) { call_user_func($callback); } return $this; } /** * Adding object for using in transaction * * @param \Magento\Framework\Model\AbstractModel $object * @param string $alias * @return $this */ public function addObject(\Magento\Framework\Model\AbstractModel $object, $alias = '') { $this->_objects[] = $object; if (!empty($alias)) { $this->_objectsByAlias[$alias] = $object; } return $this; } /** * Add callback function which will be called before commit transactions * * @param callable $callback * @return $this */ public function addCommitCallback($callback) { $this->_beforeCommitCallbacks[] = $callback; return $this; } /** * Initialize objects save transaction * * @return $this * @throws \Exception */ public function save() { $this->_startTransaction(); $error = false; try { foreach ($this->_objects as $object) { $object->save(); } } catch (\Exception $e) { $error = $e; } if ($error === false) { try { $this->_runCallbacks(); } catch (\Exception $e) { $error = $e; } } if ($error) { $this->_rollbackTransaction(); throw $error; } else { $this->_commitTransaction(); } return $this; } /** * Initialize objects delete transaction * * @return $this * @throws \Exception */ public function delete() { $this->_startTransaction(); $error = false; try { foreach ($this->_objects as $object) { $object->delete(); } } catch (\Exception $e) { $error = $e; } if ($error === false) { try { $this->_runCallbacks(); } catch (\Exception $e) { $error = $e; } } if ($error) { $this->_rollbackTransaction(); throw $error; } else { $this->_commitTransaction(); } return $this; } }