sbooker/doctrine-transaction-handler
Composer 安装命令:
composer require sbooker/doctrine-transaction-handler
包简介
Doctrine transaction handler implementation for sbooker/transaction-manager
README 文档
README
Doctrine Transaction Handler (sbooker/doctrine-transaction-handler)
Готовая реализация TransactionHandler для интеграции sbooker/transaction-manager с Doctrine ORM.
Назначение библиотеки
Эта библиотека — "мост" между абстрактным менеджером транзакций и Doctrine ORM. Она избавляет вас от необходимости писать собственный адаптер.
Так же библиотека решает фундаментальную проблему управления памятью и состоянием в долгоживущих процессах (воркерах, консьюмерах), которые являются одним из сценариев использования transaction-manager.
Ключевые особенности
- Автоматическое управление памятью и состоянием: После каждого успешного коммита обработчик вызывает
EntityManager::clear(). Это критически важно для долгоживущих процессов и обеспечивает:- Предотвращение утечек памяти: Unit of Work не разрастается бесконечно.
- Гарантию свежести данных: На каждой новой итерации сущности будут загружены из БД заново.
- Изоляцию операций: Состояние предыдущей транзакции не влияет на следующую.
- Готовое решение: Просто установите и используйте.
- Пессимистичная блокировка: Гарантирует целостность данных при одновременном доступе "из коробки" (
LockMode::PESSIMISTIC_WRITE). - Правильная обработка исключений: Корректно преобразует
UniqueConstraintViolationExceptionвUniqueConstraintViolationизtransaction-manager.
Установка
composer require sbooker/doctrine-transaction-handler
Зависимости:
sbooker/transaction-managerdoctrine/orm
Использование
Использование библиотеки сводится к одному шагу — созданию экземпляра DoctrineTransactionHandler и передаче его в TransactionManager.
// bootstrap.php или ваш DI-контейнер use Doctrine\ORM\EntityManagerInterface; use Sbooker\TransactionManager\TransactionManager; use Sbooker\TransactionManager\DoctrineTransactionHandler; /** @var EntityManagerInterface $entityManager */ // 1. Создаем обработчик, передав в него EntityManager $transactionHandler = new DoctrineTransactionHandler($entityManager); // 2. Создаем менеджер транзакций $transactionManager = new TransactionManager($transactionHandler); // 3. Готово! Теперь используйте $transactionManager в вашем прикладном коде $transactionManager->transactional(function () { // ... ваш код ... }); // После успешного выполнения этого блока, $entityManager->clear() будет вызван автоматически.
После этой простой настройки вы можете полноценно использовать TransactionManager во всем приложении, как описано в его документации.
License
See LICENSE file.
统计信息
- 总下载量: 5.18k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 2
- 依赖项目数: 2
- 推荐数: 4
其他信息
- 授权协议: MIT
- 更新时间: 2020-06-03