Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以将Symfony2、Doctrine2与使用MySql和Sqlite中多个数据库的公共实体一起使用?_Sqlite_Symfony_Doctrine Orm_Entities - Fatal编程技术网

是否可以将Symfony2、Doctrine2与使用MySql和Sqlite中多个数据库的公共实体一起使用?

是否可以将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

我正在寻找一种将单个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: ~
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
,并在那里定义
连接。