Суть: есть некторая AR которую хотим например удалить, после удаление должна пройти синхра с read базой данных. Для удаления есть команда. Команда выполняется в транзакции. Синхронизация должна происходить после выполнения транзакции. Хочется использовать событие ENTITY_DELETE например. Насколько знаю события публикуются в репозиториях, но беда - репозитории не используем, где лучше выталкивать событие наружу? Как бы поступили вы? Добавить еще декторатор для комманды?
Транзакционная команда:
Код: Выделить всё
class TransactionalCommand implements Command
{
/**
* @var Command
*/
private $command;
public function __construct(Command $command)
{
$this->command = $command;
}
public function execute($request = null)
{
$transaction = \Yii::$app->getDb()->beginTransaction();
try {
$this->command->execute($request);
$transaction->commit();
} catch (\Exception $e) {
$transaction->rollBack();
throw new ServiceException($e->getMessage());
} catch (\Throwable $e) {
$transaction->rollBack();
throw new ServiceException($e->getMessage());
}
}
}