我正在寻找一种将单个 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 数据库时所做的那样。
任何想法或帮助将不胜感激。