我正在寻找一种方法,将单个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没有这样的表:Store.tblEmployee
(显然,symfony创建的表名为Store__tblEmployee)
问题:
有没有办法在同一个EntityManager上使用多个sqlite数据库?我需要能够跨数据库加入,正如我在连接到mysql数据库时所做的那样。
任何想法或帮助将不胜感激。