You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony5中如何配置Doctrine使migration_versions表用自定义Schema?

解决方案:将Doctrine迁移版本表指定到自定义Schema

1. 修改Doctrine Migrations配置,指定带Schema的表名

直接在table_storage的table_name字段中使用[自定义Schema].[迁移表名]的格式,覆盖原有配置:

doctrine_migrations:
    migrations_paths:
        'DoctrineMigrations': '%kernel.project_dir%/migrations'
    storage:
        table_storage:
            # 格式:自定义Schema名 + 迁移表名
            table_name: 'd_mkgo_planning.doctrine_migration_versions_planning'
            version_column_name: 'version'
            version_column_length: 192
            executed_at_column_name: 'executed_at'

2. 确保自定义Schema存在

Doctrine Migrations不会自动创建Schema,需提前完成创建:

  • 方式一:手动在Postgres中执行SQL
    CREATE SCHEMA IF NOT EXISTS d_mkgo_planning;
    
  • 方式二:在第一个迁移类中添加创建逻辑
    // migrations/VersionXXXXXXXXX.php
    public function up(Schema $schema): void
    {
        // 不存在则创建自定义Schema
        if (!$schema->hasNamespace('d_mkgo_planning')) {
            $schema->createNamespace('d_mkgo_planning');
        }
        // 后续迁移逻辑...
    }
    
    public function down(Schema $schema): void
    {
        // 请勿在此删除Schema,避免误删业务数据
    }
    

3. 验证迁移执行

执行迁移命令后,Doctrine会自动在指定Schema下生成迁移版本表,不再使用public Schema。每个微服务配置不同的Schema前缀,即可完全隔离各自的迁移记录,避免互相删除对方迁移表的问题。

补充说明

  • 你已实现的TableSchemaSubscriber监听器可正常处理实体的Schema归属,无需修改;
  • 确保每个微服务的doctrine_migrations.storage.table_storage.table_name配置都使用专属Schema前缀(如服务A用schema_a.migration_versions,服务B用schema_b.migration_versions);
  • 确认数据库用户拥有创建Schema和表的权限。

内容的提问来源于stack exchange,提问作者Amrou rabti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 21:20:23