Symfony Make:Migration : 元数据存储不是最新的,请运行 sync-metadata-storage 命令来解决这个问题

Azi*_*ina 31 php error-handling metadata symfony

每次我尝试使用命令行进行迁移时,我都会遇到这个问题:php bin/console make:migration 或者即使doctrine:migration status 当我尝试doctrine:migration:sync-metadata-storage他们告诉我时,我仍然收到相同的错误消息。

我目前正在学习 symfony 并且一直在遵循指南,但我以某种方式遇到了这个问题 Symfony 4.4 php 7.2

Mee*_*Wel 93

尝试将 .env 中的 DATABASE_URL 从

DATABASE_URL=mysql://root:@127.0.0.1:3306/testtest?serverVersion=10.4.11
Run Code Online (Sandbox Code Playgroud)

DATABASE_URL=mysql://root:@127.0.0.1:3306/testtest?serverVersion=mariadb-10.4.11
Run Code Online (Sandbox Code Playgroud)

Symfony 文档建议指定版本号而不是数据库类型

“您可以在 config/packages/doctrine.yaml 中配置更多选项,包括您的 server_version(例如,如果您使用的是 MySQL 5.7,则为 5.7),这可能会影响 Doctrine 的功能。” https://symfony.com/doc/current/doctrine.html

原答案:https : //github.com/doctrine/DoctrineMigrationsBundle/issues/337#issuecomment-645390496

  • 只需在您的 mariaDB 服务器上执行“SELECT VERSION()”并使用该字符串作为配置中的版本即可。就我而言 ?serverVersion=10.3.25-MariaDB-0+deb10u1 并且它有效。 (4认同)

uti*_*vid 26

对我来说,在服务器版本前加上 mariadb-xxx 就足够了,它解决了这个问题。

“如果您正在运行 MariaDB 数据库,您应该在 serverVersion 前面加上 mariadb-(例如:mariadb-10.2.12)。”

https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url


小智 15

如果我改变DATABASE_URLin.env

从:

DATABASE_URL=mysql://root:@127.0.0.1:3306/testtest?serverVersion=10.4.11
Run Code Online (Sandbox Code Playgroud)

到:

DATABASE_URL=mysql://root:@127.0.0.1:3306/testtest?serverVersion=mariadb-10.4.11
Run Code Online (Sandbox Code Playgroud)


小智 11

就我而言,当我从 url 中删除 : ?serverVersion=5.2 时,它会起作用。


zoo*_*ore 10

交响乐5.1

如果你有:

指定的平台版本“maridb-10.4.13”无效。平台版本必须以以下格式指定:“<major_version>.<minor_version>.<patch_version>”。

只做其中之一

配置/doctrine.yaml

doctrine:
  dbal:
    server_version: 'mariadb-10.4.13'
Run Code Online (Sandbox Code Playgroud)

或者在配置文件.env中

DATABASE_URL=mysql://databaseUsername:UserPassword@localhost:3306/databaseName?serverVersion=mariadb-10.4.13
Run Code Online (Sandbox Code Playgroud)


小智 7

升级到 Doctrine migrations 3 后我遇到了同样的问题

似乎很多东西都发生了变化,包括存储迁移版本的表名:(

所以我更新了config/packages/doctrine_migrations.yaml,创建了一个新的(空白)迁移,清除了缓存(以防万一),一切都很好:)

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%/src/Migrations'
storage:
    # Default (SQL table) metadata storage configuration
    table_storage:
        table_name: 'migration_versions'
        version_column_name: 'version'
        version_column_length: 1024
        executed_at_column_name: 'executed_at'
        execution_time_column_name: 'execution_time'
Run Code Online (Sandbox Code Playgroud)

顺便提一句。文档是最新的 ;) https://symfony.com/doc/master/bundles/DoctrineMigrationsBundle/index.html

  • 如果使用 MySQL 则需要设置 version_column_length: 255 (2认同)

小智 7

你必须改变serverVersion=5.7.ENVserverVersion=mariadb-10.4.8


小智 6

改变

DATABASE_URL=mysql://root:@127.0.0.1:3306/testtest?serverVersion=10.4.11
Run Code Online (Sandbox Code Playgroud)

DATABASE_URL=mysql://root:@127.0.0.1:3306/testtest?serverVersion=mariadb-10.4.11
Run Code Online (Sandbox Code Playgroud)


小智 5

我已经添加serverVersion=mariadb-10.4.11了数据库 URL 字符串,并且它起作用了。


小智 0

我也有同样的问题,是因为新版本的doctrine migration 3.0

php bin/console  debug:config DoctrineMigrationsBundle 
Run Code Online (Sandbox Code Playgroud)

https://symfony.com/doc/master/bundles/DoctrineMigrationsBundle/index.html