1

MySqlおよびsqlite接続用に複数のデータベースで単一のEntityManagerを使用する方法を探しています。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データベースに接続しているときと同じように、データベース間で参加できる必要があります。

任意のアイデアや助けをいただければ幸いです。

4

0 に答える 0