Symfony从SQLServer迁移至PostgreSQL时指定schema未生效求助
解决Symfony + PostgreSQL指定架构不生效的问题
1. 修正Doctrine DBAL核心配置
打开config/packages/doctrine.yaml,在dbal配置块中明确声明默认架构:
doctrine: dbal: url: '%env(resolve:DATABASE_URL)%' default_schema: snb # 新增此行,指定全局默认架构 # 其他DBAL配置项...
2. 为ORM实体映射指定架构
同样在doctrine.yaml的orm部分,给你的实体命名空间绑定默认架构:
doctrine: # ... 上述DBAL配置 orm: auto_generate_proxy_classes: true naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware auto_mapping: true mappings: App: is_bundle: false type: attribute dir: '%kernel.project_dir%/src/Entity' prefix: 'App\Entity' alias: App schema: snb # 为App下所有实体指定默认架构
3. 确认实体类的Schema注解
如果需要单独为某个实体指定架构,在实体类上添加对应注解:
属性格式(Symfony 5.4+)
#[ORM\Entity] #[ORM\Table(schema: 'snb')] class YourEntity { // ... 实体字段定义 }
注解格式(旧版本兼容)
/** * @ORM\Entity * @ORM\Table(schema="snb") */ class YourEntity { // ... 实体字段定义 }
4. 清除缓存确保配置生效
执行命令清除Symfony和Doctrine的缓存,避免旧配置残留:
# 开发环境 php bin/console cache:clear # 生产环境 php bin/console cache:clear --env=prod
5. 修正连接字符串的serverVersion参数
注意你当前连接字符串中的serverVersion=18是SQL Server的版本号,PostgreSQL需要填写实际安装的版本(如14、15、16),修正后的示例:
postgresql://postgres:*password*@127.0.0.1:5432/apps?serverVersion=15&charset=utf8&default_table_schema=snb
内容的提问来源于stack exchange,提问作者digitalway
相关产品推荐
相关产品推荐

