1

我正在寻找一种将单个 EntityManager 与多个数据库一起用于 MySql 和 sqlite 连接的方法。Mysql 用于生产,而我们想使用 Sqlite 进行测试。

它适用于mysql。我没有在 config.yml 的默认连接中指定 dbname,然后在实体注释中引用表名,例如@ORM\Table(name="Orders.tblAccount"). 我们这样做是因为我们有跨数据库关系。

但是当更改驱动程序并将其用于 Sqlite 时,我无法为此连接删除/创建数据库,因为没有数据库名称,但我不需要指定 EntityManager 名称即可使用来自不同数据库的实体。

示例:用于 mysql 连接的 config.yml

doctrine:
    dbal:
        default_connection: Default
        connections:
            Default:
                driver:   %database_driver%
                host:     %database_host%
                user:     %database_user%
                password: %database_password%
                charset:  %database_charset%
    orm:
        default_entity_manager: Default
        entity_managers:
            Default:
                connection: Default
                mappings:
                    AcmeOrdersBundle: ~
                    AcmeStoreBundle: ~

示例:实体的注释

/**
 * Acme\OrdersBundle\Entity\Account
 *
 * @ORM\Table(name="Orders.tblAccount")
 * @ORM\Entity(repositoryClass="Acme\OrdersBundle\Repository\AccountRepository")
 * @ORM\HasLifecycleCallbacks
 */
class Account

/**
 * Acme\OrdersBundle\Entity\AccountType
 *
 * @ORM\Table(name="Orders.ublAccountType")
 * @ORM\Entity(repositoryClass="Acme\CoreBundle\Repository\DoctrineRepository")
 */
class AccountType extends BaseEntity

/**
 * Acme\StoreBundle\Entity\Employee
 *
 * @ORM\Table(name="Store.tblEmployee")
 * @ORM\Entity(repositoryClass="Acme\StoreBundle\Repository\EmployeeRepository")
 */
class Employee

示例:用于 sqlite 连接的当前 config.yml

SQLite connection #config.yml

doctrine:
    dbal:
        default_connection:    Default
        connections:
            Default:
                driver:   pdo_sqlite
                path:     :memory:
                memory:   true
    orm:
        auto_generate_proxy_classes: %kernel.debug%
        auto_mapping: true

实体注解是一样的,只是因为“.” 在 sqlite 表名中不是合法字符,symfony 将其替换为“__”。不幸的是,查询数据库时没有考虑到它,所以我收到以下错误:

SQLSTATE[HY000]: 一般错误: 1 no such table: Store.tblEmployee

(很明显,symfony创建的表叫做Store__tblEmployee)

问题:

有没有办法在同一个 EntityManager 上使用多个 sqlite 数据库?我需要能够跨数据库加入,就像我在连接到 mysql 数据库时所做的那样。

任何想法或帮助将不胜感激。

4

0 回答 0