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データベースに接続しているときと同じように、データベース間で参加できる必要があります。
任意のアイデアや助けをいただければ幸いです。