解决方案1:同一实体类,多个映射
首先,正如@Jekis所指出的那样,您需要不同的连接和实体管理器。
doctrine:
dbal:
default_connection: default
connections:
default:
driver: pdo_mysql
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
postgres:
driver: pdo_pgsql
host: "%pg_host%"
port: "%pg_port%"
dbname: "%pg_name%"
user: "%pg_user%"
password: "%pg_password%"
charset: UTF8
orm:
default_entity_manager: default
auto_generate_proxy_classes: "%kernel.debug%"
entity_managers:
default:
connection: default
mappings:
AppBundle:
type: yml
dir: Resources/config/doctrine/default
postgres:
connection: postgres
mappings:
AppBundle:
type: yml
dir: Resources/config/doctrine/postgres
其次,由于您在相同实体上的每个连接都需要不同的映射信息,我猜您可能需要除了注解之外的其他元数据。
例如,可以使用yml文件。
这样,您可以为每个实体管理器定义特定的映射。
MySQL:
AppBundle\Entity\User:
type: entity
table: user
repositoryClass: AppBundle\Repository\UserRepository
id:
id:
type: integer
id: true
generator:
strategy: AUTO
fields:
name:
type: string
length: 255
lifecycleCallbacks: { }
Postgres:
AppBundle\Entity\User:
type: entity
schema: admin
table: user
repositoryClass: AppBundle\Repository\UserRepository
id:
id:
type: integer
id: true
generator:
strategy: AUTO
fields:
name:
type: string
length: 255
lifecycleCallbacks: { }
然后,在调用doctrine:schema:update
命令时,您还可以传递要更新的数据库的实体管理器。
php bin/console doctrine:schema:create
php bin/console doctrine:schema:create -em postgres
这是我做的测试:
https://github.com/vtoulouse/multiple-mapping-test
解决方案2: 多实体类
或者,如果你想要使用注释,你必须要复制你的实体类,就像
这个答案所展示的那样。
schema="admin"
定义时,Doctrine 无法在 MySQL 上创建/找到表格吗? - eggyal