becklyn / ddd-doctrine-bridge
Doctrine 实现的事件存储和事务管理器,用于与 becklyn/ddd-core 一起使用
3.0.2
2024-03-04 09:28 UTC
Requires
- php: >=8.0
- becklyn/ddd-core: ^3.0 || ^4.0
- doctrine/migrations: ^3.0
- doctrine/orm: ^2.9
- doctrine/persistence: ^2.0||^3.0
- illuminate/collections: ^8.12 || ^9.0
- ramsey/uuid: ^4.0
- symfony/serializer: ^5.4 || ^6.0
Requires (Dev)
- phpspec/prophecy-phpunit: ^2.0
- phpunit/phpunit: ^9.1
README
becklyn/ddd-doctrine-bridge 为 becklyn/ddd-core 中发现的事件存储和事务管理器接口提供 Doctrine ORM 实现。该库不依赖于 Doctrine 以外的任何技术平台,但我们还提供了 becklyn/ddd-symfony-bridge 库,用于在 Symfony 应用程序中使用。
如何使用
有关如何使用库提供的组件的说明,请参阅 becklyn/ddd-core 文档。
设置事件存储
不使用 becklyn/ddd-symfony-bridge 库,您将需要自己将事件存储与应用程序集成。除了事件存储实现外,此库还提供 XML 和注解格式的 Doctrine ORM 映射,以及 Doctrine Migrations 3 迁移来设置数据库表。
事件时间戳中的微秒
为了使 Doctrine ORM 2 将微秒持久化到数据库中,作为表示事件何时被引发的时间戳的一部分,您需要将 DateTimeImmutableMicrosecondsType
类注册到 Doctrine DBAL 中,作为 datetime_immutable
类的覆盖。理想情况下,应在引导过程中完成此操作,例如:
use Doctrine\DBAL\Types\Type;
Type::overrideType('datetime_immutable', 'Becklyn\Ddd\DateTime\Infrastructure\Doctrine\DateTimeImmutableMicrosecondsType');
目前仅支持 MySQL 和 Oracle。对于 MySQL,在 Doctrine ORM 3 中,这可能不再需要,因为它应该会原生地包含此功能。对于 Oracle,还需要激活 \Becklyn\Ddd\DateTime\Infrastructure\Doctrine\MicrosecondsOracleSessionInit
Doctrine 监听器。