是否可以将Symfony2、Doctrine2与使用MySql和Sqlite中多个数据库的公共实体一起使用?
我正在寻找一种将单个EntityManager与多个数据库一起用于MySql和sqlite连接的方法。Mysql用于生产,而我们希望使用Sqlite进行测试 它与mysql配合得很好。我不会在config.yml中的默认连接中指定dbname,然后在实体注释中引用表名,如是否可以将Symfony2、Doctrine2与使用MySql和Sqlite中多个数据库的公共实体一起使用?,sqlite,symfony,doctrine-orm,entities,Sqlite,Symfony,Doctrine Orm,Entities,我正在寻找一种将单个EntityManager与多个数据库一起用于MySql和sqlite连接的方法。Mysql用于生产,而我们希望使用Sqlite进行测试 它与mysql配合得很好。我不会在config.yml中的默认连接中指定dbname,然后在实体注释中引用表名,如@ORM\table(name=“Orders.tblAccount”)。我们这样做是因为我们有跨数据库的关系 但是,当更改驱动程序并将其用于Sqlite时,我无法为此连接删除/创建数据库,因为没有数据库名称,但我不需要指定En
@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: ~
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
示例:实体注释
/**
* 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
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: ~
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将其替换为“_u”。不幸的是,在查询数据库时没有考虑它,因此我得到以下错误:
SQLSTATE[HY000]:一般错误:1没有这样的表:Store.tblEmployee
(显然,symfony创建的表被称为Store_uutblemployee)
问题:
有没有办法在同一个EntityManager上使用多个sqlite数据库?我需要能够跨数据库连接,就像连接到mysql数据库时一样
任何想法或帮助都将不胜感激。我认为条令不是为管理跨数据库连接而设计的。由于MySQL对表命名和db.table选择的容忍度,MySQL实现了这一点。至少可以在不指定数据库的情况下(通过SQLite客户端)连接到SQLite吗?也许您应该定义为什么要使用SQLite进行测试(顺便说一句,您所说的测试是什么意思?),使用不同的表/基/服务器对于开发和测试都很好,并且可以为您节省大量工作,使其按预期工作(考虑到两个引擎在SQL语言支持方面的细微差别)。请注意,正确的解决方案是在
config_dev.yml
中覆盖config.yml
,并在那里定义连接。