可以在MySql和Sqlite中使用Symfony2,Doctrine2和使用多个数据库的公共实体吗?

时间:2013-01-08 17:13:34

标签: sqlite symfony doctrine-orm entities

我正在寻找一种方法,将单个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数据库时所做的那样。

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

0 个答案:

没有答案