Схема базы данных не синхронизирована для столбца, допускающего значение NULL

Только что выяснилось, что doctrine:schema:validate выдает ошибку:

[ERROR] The database schema is not in sync with the current mapping file.

Итак, я попытался использовать doctrine:schema:update --force --complete --dump-sql, который оказался успешным:

The following SQL statements will be executed:

 ALTER TABLE user CHANGE last_login `last_login` DATETIME DEFAULT NULL;

Updating database schema...

 1 query was executed

[OK] Database schema updated successfully!

Но если я снова запустил doctrine:schema:validate, он выдает ту же ошибку, касающуюся несинхронизации схемы.

Я проверил определение поля таблицы базы данных, и оно выглядит хорошо:

`last_login` datetime DEFAULT NULL

А вот как определяется столбец:

/**
 * @ORM\Column(type = "datetime", nullable=true)
 */
private $last_login;

Я нашел это: https://github.com/doctrine/dbal/pull/2825

Любые идеи?

Какую версию doctrine/dbal вы используете?

xabbuh 15.08.2018 10:04

doctrine.dbal.server_version: '5.7'

Roman Newaza 15.08.2018 12:22

Нет, я имею в виду версию установленного пакета (т.е. то, что отображается при запуске composer show).

xabbuh 15.08.2018 14:42
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
1
3
751
3

Ответы 3

Похоже, что у Doctrine есть проблемы с определением правильной версии MySQL API при попытке получить версию сервера из установки MariaDB.

Это может помочь определить номер версии MySQL в вашей конфигурации. Это помогло мне в нескольких проектах, например. при использовании MariaDB в Debian Stretch.

# app/config/config.yml

doctrine:
    # …
    dbal:
        # …
        server_version: 5.7

Это приведет к тому, что Doctrine пропустит автоматическое определение версии MySQL и будет использовать новейший API.

хотя он определен: doctrine.dbal.server_version: '5.7'

Roman Newaza 15.08.2018 12:21

Не могли бы вы попробовать установить его на 5.6 (потом очистить кеш)?

lxg 15.08.2018 12:24

Извините, нет, так как я перешел на MySQL

Roman Newaza 15.08.2018 12:47

В вашем config.yml или doctrine.yaml (в зависимости от версии Symfony) установите правильную версию сервера вашей базы данных. Например.:

doctrine:
    # …
    dbal:
        # …
        server_version: mariadb-10.2.15

Обратите внимание на префикс mariadb.

Я изменил DATABASE_URL в своем .env.local, и это сработало. Раньше (не работало)

DATABASE_URL=mysql://root:[email protected]:3306/db?serverVersion=10.4.12

После (наконец-то сработал)

DATABASE_URL=mysql://root:[email protected]:3306/db?serverVersion=mariadb-10.4.12

Другие вопросы по теме