suvera/winter-doctrine

Winterboot 框架中的 Doctrine ORM/DBAL 支持

v1.0 2024-07-01 14:00 UTC

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 文件中,您可能已经按照以下方式设置了数据源。

在下面的示例中,这里配置了两个具有名称的数据源。

  1. defaultdb (isPrimary: true)
  2. 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 框架的文章。

  1. 事务管理
  2. 面向切面的魔法

在 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
}