无法访问“最新”版本,没有注册的迁移

Don*_*Msc 7 php doctrine database-migration symfony

因此,我正在设置一个 Symfony 5 项目并运行以下命令来从实体注释生成数据库,如下所示:

php bin/console doctrine:schema:validate
php bin/console doctrine:migrations:diff
php bin/console doctrine:migrations:migrate
Run Code Online (Sandbox Code Playgroud)

但它没有按预期工作,相反,我只是收到此错误:

**[ERROR]** The version "latest" couldn't be reached, there are no registered migrations.
Run Code Online (Sandbox Code Playgroud)

diff命令正确生成包含up()down()函数的迁移文件,但是当我随后运行migrate命令来生成数据库时,它会失败并出现上述错误。

我还注意到文件 /config/packages/doctrine_migrations.yml 最近已更改为:

doctrine_migrations:
    migrations_paths:
        'App\Migrations': '%kernel.project_dir%/src/Migrations'
Run Code Online (Sandbox Code Playgroud)

然而,学说似乎正在这条路径之外寻找以下路径中的迁移:

'%kernel.project_dir%/migrations'
Run Code Online (Sandbox Code Playgroud)

如何解决上述错误,以便migrate命令按预期工作并从生成的迁移文件生成数据库表?

php bin/console 调试:配置doctrine_migrations

Current configuration for extension with alias "doctrine_migrations"
=================================================================    ===

doctrine_migrations:
    migrations_paths:
        App\Migrations: /var/www/src/Migrations
    services: {  }
    factories: {  }
    storage:
        table_storage:
            table_name: null
            version_column_name: null
            version_column_length: null
            executed_at_column_name: null
            execution_time_column_name: null
    migrations: {  }
    connection: null
    em: null
    all_or_nothing: false
    check_database_platform: true
    custom_template: null
    organize_migrations: false
Run Code Online (Sandbox Code Playgroud)

ric*_*yce 11

检查迁移脚本的命名空间和迁移包的配置。将目录从 移动到 后,src/migrationsmigrations必须将文件的命名空间更改为DoctrineMigrations并将存储表名称更改为存在的表名称(否则新的默认迁移表名称为doctrine_migration_versions)。

这是我的建议:/migrations 中的一些迁移文件

<?php

declare(strict_types=1);

namespace DoctrineMigrations;

use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;

// ...
Run Code Online (Sandbox Code Playgroud)

配置:

doctrine_migrations:
    migrations_paths:
        # namespace is arbitrary but should be different from App\Migrations
        # as migrations classes should NOT be autoloaded
        'DoctrineMigrations': '%kernel.project_dir%/migrations'

    storage:
        # Default (SQL table) metadata storage configuration
        table_storage:
            table_name: 'migration_versions'
Run Code Online (Sandbox Code Playgroud)

这有助于我使用 Symfony5 从头开始​​设置项目,并向后兼容当前正在运行的生产系统。


小智 5

"php bin/console make:migration"我认为你需要先运行命令"php bin/console make:migration:migrate"

我希望这是有帮助的。