Symfony 4 在通过 make:user 架构更新生成用户后崩溃

Symfony 4 after generating user via make:user schema update crashed

我正在尝试通过 CLI 创建用户:(symfony doc)

php bin/console make:user

此命令创建 User.php 实现用户界面的实体。

但是在命令之后:

php bin/console doctrine:schema:update --force

我收到错误:

在 AbstractMySQLDriver.php 第 79 行:

An exception occurred while executing 'CREATE TABLE user (id INT AUTO_INCREMENT NOT NULL, email VARCHAR(18 0) NOT NULL, roles JSON NOT NULL, password VARCHAR(255) NOT NULL, UNIQUE INDEX UNIQ_8D93D649E7927C74 (emai l), 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 ma nual that corresponds to your MariaDB server version for the right syntax to use near 'JSON NOT NULL, pass word VARCHAR(255) NOT NULL, UNIQUE INDEX UNIQ_8D93D649E7927C7' at line 1

在 PDOConnection.php 第 90 行:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the ma nual that corresponds to your MariaDB server version for the right syntax to use near 'JSON NOT NULL, pass word VARCHAR(255) NOT NULL, UNIQUE INDEX UNIQ_8D93D649E7927C7' at line 1

在 PDOConnection.php 第 88 行:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the ma nual that corresponds to your MariaDB server version for the right syntax to use near 'JSON NOT NULL, pass word VARCHAR(255) NOT NULL, UNIQUE INDEX UNIQ_8D93D649E7927C7' at line 1

编辑:

关于sql的信息:

服务器类型:MariaDB

服务器版本:10.1.31-MariaDB - mariadb.org二进制分发

协议版本:10

JSON Type 是您的 MariaDB 数据库版本的未知类型(参见 type documentation)。 Doctrine 创建了一个错误的迁移脚本,因为它不知道您使用的是哪个版本。

config/packages/doctrine.yml 中的 server_version 配置为:

doctrine:
dbal:
    # configure these for your database server
    driver: 'pdo_mysql'
    server_version: 'XXXX'
    ...

将 X 替换为您的版本,前缀为 mariadb- 作为 mentioned in documentation。所以 DoctrineBundle 会知道不支持 JSON 并将替换为另一种类型。

您的 MariaDB 必须更新。您有一个类型为 JSON 的字段(例如角色),但它是 only available from 10.2+,您的版本是 10.1.


此外,您使用的方法 (update+ --force) 不是很适合 Symfony 4。更好的方法是:

php bin/console make:user 
php bin/console make:migration
php bin/console doctrine:migrations:migrate