我使用symfony2框架开发了一个应用程序。应用程序需要在不同的服务器上工作,一个使用mysql,一个使用postgresql。
对于postgresql,我需要在几个表中使用schema="admin"。我输入make on entities:
@ORM 表(模式="admin",name = " si_user ")
在postgresql上运行良好
当我尝试更新或创建schema sql时,学说不会创建或查找表。它的工作发现当我删除schema="admin"。
@ORM 表(name = " si_user ")
你有什么解决方案来保持模式属性和mysql不使用模式属性?
谢谢你的帮助
解决方案1:相同的实体类,多个映射
首先,正如@Jekis指出的,你将需要不同的连接和实体管理器。
# Doctrine Configuration
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:# Resources/config/doctrine/default/User.orm.yml
AppBundleEntityUser:
type: entity
table: user
repositoryClass: AppBundleRepositoryUserRepository
id:
id:
type: integer
id: true
generator:
strategy: AUTO
fields:
name:
type: string
length: 255
lifecycleCallbacks: { }
Postgres:
# Resources/config/doctrine/postgres/User.orm.yml
AppBundleEntityUser:
type: entity
schema: admin
table: user
repositoryClass: AppBundleRepositoryUserRepository
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:多个实体类
或者,如果您想使用注释,您将不得不复制您的实体类,如这个答案所示。