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

问题描述 投票:0回答:3

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

php bin/console doctrine:schema:validate
php bin/console doctrine:migrations:diff
php bin/console doctrine:migrations:migrate

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

**[ERROR]** The version "latest" couldn't be reached, there are no registered migrations.

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

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

doctrine_migrations:
    migrations_paths:
        'App\Migrations': '%kernel.project_dir%/src/Migrations'

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

'%kernel.project_dir%/migrations'

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

php bin/控制台调试:配置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
php symfony doctrine database-migration
3个回答
11
投票

检查迁移脚本的命名空间和迁移包的配置。将目录从

src/migrations
移动到
migrations
后,您必须将文件的命名空间更改为
DoctrineMigrations
并将存储表名称更改为现有的表名称(否则新的默认迁移表名称为
doctrine_migration_versions
) .

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

<?php

declare(strict_types=1);

namespace DoctrineMigrations;

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

// ...

配置:

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'

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


5
投票

我认为你需要在

"php bin/console make:migration"
 之前运行命令 
"php bin/console make:migration:migrate"

我希望这对你有帮助。


0
投票

我只是想添加一个信息,因为我被困太久了。

我更新了我的数据库,但我忘记更新

server_version
中的
config/packages/doctrine.yaml
。当我纠正它时,错误消失了。

© www.soinside.com 2019 - 2024. All rights reserved.