MySQL / MariaDB не принимает формат JSON?Не могу создать базу данных - PullRequest
0 голосов
/ 21 ноября 2018

В настоящее время я использую XAMPP / Apache с MariaDB на phpmyadmin.Я пытаюсь создать таблицу на основе моего кода, используя Doctrine и, следовательно, аннотации для проверки формы.Я просто хочу сохранить введенные значения из формы в базе данных.В другом примере это прекрасно работало.

Но теперь у меня есть «поле флажка», которое, как мне кажется, вызывает какие-то проблемы при создании базы данных.

Я использую эти команды вконсоль:

php bin/console make:migration

Впоследствии:

php bin/console doctrine:migrations:migrate

При вызове 2nd = когда я пытаюсь создать таблицу в своей базе данных, я получаю следующие ошибки:

Migration 20181121103017 failed during Execution. 
Error An exception occurred while executing 'CREATE TABLE pizza (id INT 
AUTO_INCREMENT NOT NULL, name VARCHAR(255) NOT NULL, address VARCHAR(255) NOT NULL
phone VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL, 
size INT NOT NULL, ingredient JSON NOT NULL COMMENT '(DC2Type:json_array)', delivery INT NOT NULL, 
PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB':


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 COMMENT '(DC2Type:json_
array)', delivery INT NOT NULL, PRIMARY KEY' at line 1

Я действительно не знаю, что я делаю не так в данный момент.

Это мои аннотации в моем файле "Pizza.php".

// ------------------

/**
 * @Assert\NotBlank(
 *     message = "E-Mail Address required"
 * )
 * @Assert\Email(
 *     message = "The email '{{ value }}' is not a valid email."
 * )
 * @Assert\Length(min="2", max="255")
 * @ORM\Column(type="string", length=255)
 */

protected $email;

// ------------------

/**
 * @Assert\Range(min=0, max=3)
 * @ORM\Column(type="integer")
 */

protected $size;

// ------------------

/**
 *@Assert\NotBlank(
 *     message = "Choose at least 1 ingredient!"
 * )
 * @ORM\Column(type="array")
 */

protected $ingredient;

// ------------------

/**
 * @Assert\NotBlank(
 *     message = "Choose a delivery option!"
 * )
 * @Assert\Range(min=0, max=1)
 * @ORM\Column(type="integer")
 */

protected $delivery;

Формасама работает отлично, проверки работают так, как я и предполагал.

Что именно я делаю не так?

Если вам нужен еще какой-нибудь код из моего "Pizza.php" (Entity Class)) или мой файл контроллера, где я сделал мой маршрут, пожалуйста, дайте мне знать.

Я благодарен за любую помощь!

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Сначала проверьте свою версию mariadb.Версия 10.1 не поддерживает тип данных JSON, а поддержка версии 10.2 является неполной.

Обходной путь к версии в doctrine.yaml файле до

server_version: '5.6'

, затем регенерация геттеров и сеттеров с помощью

php bin/console make:entity --regenerate

, затем сгенерируйте файл миграции с помощью

php bin/console make:migration

, при этом будет создан файл миграции с типом данных, установленным в LONGTEXT .

Затем в src / Migrations откройте каждый файл и проверьте наличие любого файла миграции с JSON в качестве типа данных и удалите все миграциис таким типом данных.Помните, что если вы не удалите эти файлы, следующая команда повторяется, каждый файл сохраняет их в базе данных один за другим, начиная со старого.Если такой файл существует, он снова вызовет ошибку.

Наконец, запустите

php bin/console doctrine:migrations:migrate

, который сохранит все миграции в базу данных соответственно.

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

Судя по вашим комментариям, похоже, что Doctrine считает, что может использовать функции, недоступные в вашей версии mariadb.

Если вы сообщите доктрине, какую версию вы используете, он выберет правильный тип данных дляэтот столбец, в данном случае, вероятно, LONGTEXT или что-то подобное.

В зависимости от того, что вы используете, он будет выглядеть примерно так (например, с помощью файла yaml в symfony):

doctrine:
    dbal:
        server_version: '10.1'

Обратите внимание, что вам нужно будет заново сгенерировать миграцию.

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

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