Symfony 4多Doctrine连接下能否自定义目录生成实体类
解决方案:自定义实体目录+多Doctrine连接适配
当然可以!不仅能指定自定义目录生成Product实体,还能结合你配置的两个Doctrine连接,让不同目录的实体对应不同的数据库连接,完美适配你的场景。下面分步骤给你讲清楚:
1. 单次生成实体到自定义目录
如果只是临时想把Product实体放到指定目录(比如src/CustomEntity),直接在make:entity命令后追加--path参数即可:
php bin/console make:entity Product --path=src/CustomEntity
执行后,Product类会自动生成在src/CustomEntity目录下,而且命名空间会自动设置为App\CustomEntity,不用手动修改。
2. 设置默认实体目录(永久生效)
如果以后大部分实体都想生成到同一个自定义目录,不想每次都加参数,可以修改maker-bundle的配置:
在config/packages/maker.yaml中添加(文件不存在的话直接新建):
maker: root_namespace: 'App\CustomEntity' # 替换成你想要的根命名空间
之后再执行php bin/console make:entity Product,实体就会默认生成到src/CustomEntity目录下。
3. 关联多Doctrine连接到对应实体目录
因为你配置了两个数据库连接,建议把不同连接的实体分开存放(比如默认连接对应src/Entity,远程连接对应src/RemoteEntity),避免混淆。需要修改config/packages/doctrine.yaml的ORM配置部分:
doctrine: dbal: default_connection: default connections: default: # 你的本地连接配置 url: 'mysql://root:password@localhost/local_db' remote: # 你的远程连接配置 url: 'mysql://username:pwd@xxx.xxx.xx.xxx/remote_db' orm: default_entity_manager: default entity_managers: default: connection: default mappings: App: is_bundle: false type: attribute dir: '%kernel.project_dir%/src/Entity' prefix: 'App\Entity' alias: App remote: connection: remote mappings: AppRemote: is_bundle: false type: attribute dir: '%kernel.project_dir%/src/RemoteEntity' prefix: 'App\RemoteEntity' alias: AppRemote
配置完成后,生成远程连接对应的实体时,可以指定实体管理器:
php bin/console make:entity RemoteProduct --path=src/RemoteEntity --entity-manager=remote
这样生成的实体就会归属于远程连接的实体管理器,后续操作该实体时,也可以通过--entity-manager=remote参数来操作远程数据库。
内容的提问来源于stack exchange,提问作者ShanjayG
相关产品推荐
相关产品推荐

