所以我正在设置一个 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
检查迁移脚本的命名空间和迁移包的配置。将目录从
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 从头开始设置项目,并向后兼容当前正在运行的生产系统。
我认为你需要在
"php bin/console make:migration"
之前运行命令
"php bin/console make:migration:migrate"
我希望这对你有帮助。
我只是想添加一个信息,因为我被困太久了。
我更新了我的数据库,但我忘记更新
server_version
中的config/packages/doctrine.yaml
。当我纠正它时,错误消失了。