我目前正在使用XAMPP/Apache和phpmyadmin上的MariaDB。
我正试图创建一个基于我的代码的表,使用条令,因此用于验证表单的注释。我只想将表单中输入的值存储在数据库中。
在另一个例子中,这非常有效。
但是现在我有一个“Checkbox字段”,我想它在创建数据库时会引起一些麻烦。
我在控制台中使用这些命令:

php bin/console make:migration

之后:
php bin/console doctrine:migrations:migrate

当我试图在数据库中创建表时,当调用第二个one=时,会得到以下错误:
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”(实体类)或我的控制器文件中的代码,请告诉我。
我很感激你的帮助!

最佳答案

根据您的评论,Doctrine似乎认为它可以使用您的mariadb版本上没有的特性。
如果您告诉doctrine您使用的是哪个版本,它将为该列选择正确的数据类型,在本例中可能是LONGTEXT或类似的类型。
根据您使用的是什么,它看起来像(例如在symfony中使用yaml文件):

doctrine:
    dbal:
        server_version: '10.1'

请注意,您需要重新生成迁移。
正如我在评论中提到的,我个人会规范化数据库,并使用不同的表将比萨饼与配料链接起来,使搜索和过滤变得更容易。

关于php - MySQL/MariaDB不接受JSON格式?无法创建数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53410609/

10-10 03:59
查看更多