Вынудите команду миграции доктрины Symfony использовать LONGTEXT для типа поля json вместо JSON при сопоставлении с MySQL - PullRequest
0 голосов
/ 03 декабря 2018

Я использую Symfony 4 с базой данных MySQL (5.5.57-0ubuntu0.14.04.1), которая не поддерживает тип JSON.

Когда я сопоставляю поле с "json", используя DoctrineКонфигурационный файл yml, файл миграции, генерируемый doctrine:migrations:diff, использует тип JSON MySQL вместо LONGTEXT, и он завершается с ошибкой, если я пытаюсь запустить миграцию.

И каждый раз, когда выполняется изменение миграции, янеобходимо вручную изменить JSON на LONGTEXT для последних изменений и удалить изменения в JSON в результате более старых изменений.

Легко облажаться, если в одной из этих миграций вы забудете удалить «ALTER TABLE CHANGE»Somefield JSON ".

Мое решение, на данный момент, состоит в том, чтобы добавить в файл конфигурации doctrine.yml следующее:

doctrine:
    dbal:
      mapping_types:
           longtext: json

Это делает некоторые странные, но легко отслеживаемые и удаляемые изменения, когда язапустите doctrine:migrations:diff -v, как заменить на LONGTEXT несколько полей, которые уже были LONGTEXT.Я не знаю, почему, и я должен это исправить в конце концов.

Но, по крайней мере, я мог бы помешать доктрине пытаться изменить мой длинный текст на тип данных MySQL json, который отображается как тип данных доктрины json.

Кто-нибудь сталкивался с этой проблемой?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

Для меня у меня возникла та же проблема, и решение состояло в том, чтобы зайти в созданную миграцию (например, Version20190306110143.php) и изменить dataType " JSON " на " LONGTEXT "!!

На самом деле, это сработало для меня, но, честно говоря, я не знаю, не вызовет ли это проблем со временем.В любом случае, если это произошло, я опубликую их

спасибо

0 голосов
/ 03 декабря 2018

Я ошибся, используя таким образом конфигурацию "mapping_types".Это не имеет смысла.Решение Это еще проще, и я не осознавал, что существует следующий параметр:

server_version

Просто добавьте версию сервера в конфигурации dbal следующим образом:

doctrine:
    dbal:
        driver: 'pdo_mysql'
        server_version: '5.5.57'
        charset: utf8mb4
        default_table_options:
            charset: utf8mb4
            collate: utf8mb4_unicode_ci
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...