suvera / winter-doctrine
Winterboot 框架中的 Doctrine ORM/DBAL 支持
v1.0
2024-07-01 14:00 UTC
Requires
- doctrine/orm: *
- symfony/cache: 7.2.x-dev
Suggests
- ext-pdo_mysql: For using MySQL with Doctrine ORM
- ext-pdo_oci: For using Oracle with Doctrine ORM
- ext-pdo_pgsql: For using PostgreSQL with Doctrine ORM
- ext-pdo_sqlite: For using SQLite with Doctrine ORM
- ext-pdo_sqlsrv: For using SQL Server with Doctrine ORM
This package is auto-updated.
Last update: 2024-10-02 14:25:35 UTC
README
Winter Doctrine 是一个模块,它为 WinterBoot 应用程序提供轻松配置和访问 Doctrine orm/dbal 功能。
关于 Doctrine
配置
composer require suvera/winter-doctrine
要在应用程序中启用 Doctrine 模块,请将以下代码追加到 application.yml
modules: - module: dev\winterframework\doctrine\DoctrineModule enabled: true
application.yml
在您的 application.yml 文件中,您可能已经按照以下方式设置了数据源。
在下面的示例中,这里配置了两个具有名称的数据源。
- defaultdb (isPrimary: true)
- admindb
datasource: - name: defaultdb isPrimary: true url: "sqlite::memory:" username: xxxxx password: xxzzz doctrine: entityPaths: - /path/to/defaultdb/entities isDevMode: false - name: admindb url: "mysql:host=localhost;port=3307;dbname=testdb" username: xxxxx password: xxzzz doctrine: entityPaths: - /path/to/admindb/entities - /path/other/admindb/entities2 isDevMode: false driver: driverOptions: wrapperClass: driverClass: connection: persistent: true errorMode: ERRMODE_EXCEPTION columnsCase: CASE_NATURAL idleTimeout: 300 autoCommit: true defaultrowprefetch: 100
ORM/DBAL 实例可以自动注入。无需手动创建。
Bean 名称后缀如下。自动注入代码应输入 Bean 名称。
以下示例
ORM EntityManager
// ORM - Primary (defaultdb) #[Autowired] private EntityManager $defaultEm; // Alternatively coded as: #[Autowired("defaultdb-doctrine-em")] // ORM #[Autowired("admindb-doctrine-em")] private EntityManager $adminEm;
ORM 事务管理器
// ORM - Primary Tranaction Manager (defaultdb) #[Autowired] private EmTransactionManager $defaultTxnManager; // Alternatively coded as: #[Autowired("defaultdb-doctrine-emtxn")] // ORM Tranaction Manager #[Autowired("admindb-doctrine-emtxn")] private EmTransactionManager $adminTxnManager;
DBAL 连接
// DBAL Connection - Primary (defaultdb) #[Autowired] private Connection $defaultConn; // Alternatively coded as: #[Autowired("defaultdb-doctrine-dbal")] // DBAL Connection #[Autowired("admindb-doctrine-dbal")] private Connection $adminConn;
DBAL 事务管理器
// DBAL - Primary Tranaction Manager (defaultdb) #[Autowired] private DbalTransactionManager $defaultTxnManager; // Alternatively coded as: #[Autowired("defaultdb-doctrine-dbaltxn")] // DBAL Tranaction Manager #[Autowired("admindb-doctrine-dbaltxn")] private DbalTransactionManager $adminTxnManager;
如何使用事务 - 作为 AOP
关于 winter-boot 框架的文章。
在 ORM/DBAL 事务下执行某些操作非常简单,只需使用 Transactional 注解即可。
#[Autowired("admindb-doctrine-em")] private EntityManager $adminEm; #[Transactional(transactionManager: "admindb-doctrine-emtxn")] public function executeInTransaction(): void { // do something here foreach ($objects as $obj) { $this->adminEm->persist($obj); } // do more things here }