Ошибка миграции пользователя - PullRequest
0 голосов
/ 10 ноября 2018

1) Я создал класс пользователя с помощью make: user команда:

Консольное изображение

2) Я сгенерировал файл миграции с помощью команды make: миграция .

3) Вот функция up () в файле миграции:

    final class Version20181110133851 extends AbstractMigration
    {
         public function up(Schema $schema) : void
      {

       $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 
    'mysql', 'Migration can only be executed safely on \'mysql\'.');

    $this->addSql('ALTER TABLE user ADD email VARCHAR(180) NOT NULL, ADD roles JSON NOT NULL, CHANGE id id INT AUTO_INCREMENT NOT NULL, ADD PRIMARY KEY (id)');
    $this->addSql('CREATE UNIQUE INDEX UNIQ_8D93D649E7927C74 ON user (email)');
       }
    ...
    }

4) Вот что происходит, когда я пытаюсь выполнить миграцию в базу данных с помощью доктрина: миграция: миграция команда

Изображение с ошибкой

и вот содержание ошибки:

  -> ALTER TABLE user ADD email VARCHAR(180) NOT NULL, ADD roles JSON NOT 
  NULL, CHANGE id id INT AUTO_INCREMENT NOT NULL, ADD PRIMARY KEY (id)
  Migration 20181110133851 failed during Execution. Error An exception 
  occurred while executing 'ALTER TABLE user ADD email VARCHAR(180) NOT 
  NULL, ADD roles JSON NOT NULL, CHANGE id id INT AUTO_INCREMENT NOT NULL, 
  ADD PRIMARY KEY (id)':

  SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error 
  in your SQL syntax; check the manual that corresponds to your MariaDB 
  server version for the right syntax to use near 'JSON NOT NULL, CHANGE id 
  id INT AUTO_INCREMENT NOT NULL, ADD PRIMARY KEY (id)' at line 1

  In AbstractMySQLDriver.php line 99:

  An exception occurred while executing 'ALTER TABLE user ADD email 
  VARCHAR(180) NOT NULL, ADD roles JSON NOT NULL, CHANGE id id INT 
  AUTO_INCREMENT NOT NULL, ADD PRI
  MARY KEY (id)':

 SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error 
 in your SQL syntax; check the manual that corresponds to your MariaDB 
 server version for
 the right syntax to use near 'JSON NOT NULL, CHANGE id id INT 
 AUTO_INCREMENT NOT NULL, ADD PRIMARY KEY (id)' at line 1


 In PDOConnection.php line 109:

 SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error 
 in your SQL syntax; check the manual that corresponds to your MariaDB 
 server version for
  the right syntax to use near 'JSON NOT NULL, CHANGE id id INT 
 AUTO_INCREMENT NOT NULL, ADD PRIMARY KEY (id)' at line 1


  In PDOConnection.php line 107:

  SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error 
 in your SQL syntax; check the manual that corresponds to your MariaDB 
  server version for
  the right syntax to use near 'JSON NOT NULL, CHANGE id id INT 
  AUTO_INCREMENT NOT NULL, ADD PRIMARY KEY (id)' at line 1

5) Я пытался решить это часами, но я все еще новичок, и я не думаю, что собираюсь решить это сам.

6) Мой вопрос: где СИНТАКСИЧЕСКАЯ ОШИБКА?

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Как сказал @ Padam87, MariaDB не поддерживает собственный тип JSON. Если вы не можете обновить базу данных по какой-либо причине, но не хотите изменять тип столбца, просто определите версию базы данных в свойствах Doctrine и позвольте Doctrine обработать преобразование для вас.

doctrine.yaml:

doctrine:
    dbal:
        server_version: '10.1.36-MariaDB'

Это добавит в определение таблицы комментарий, который Doctrine будет использовать позже для кодирования / декодирования значений.

0 голосов
/ 10 ноября 2018

Mariadb 10.1 не поддерживает нативный тип json, поэтому вам придется использовать другой тип. Измените определение столбца, удалите эту миграцию и создайте новую.

Кроме того, вы можете обновить. Mariadb начинает поддерживать тип json с 10.2.7 и выше. https://mariadb.com/kb/en/library/json-data-type/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...