mariabd 中长文本中的 JSON 返回“无法将数据库值转换为 Doctrine 类型 json”

bca*_*ag2 4 php doctrine mariadb symfony

Symfony 5,我User相应地编写实体代码:
https://symfony.com/doc/current/security.html#denying-access-roles-and-other-authorization

我使用 mariadb

public function getRoles(): array
    {
        $roles[] = $this->roles;
        // guarantee every user at least has ROLE_USER
        $roles[] = 'ROLE_USER';

        return array_unique($roles);
    }
Run Code Online (Sandbox Code Playgroud)

我手动添加了一个具有 role 的用户ROLE_ADMIN

我不明白为什么它返回错误:

无法将数据库值“ROLE_ADMIN”转换为 Doctrine Type json

yiv*_*ivi 5

您收到该错误是因为您将值设置为无效的 JSON。如果要直接修改数据库,则应该为 JSON 类型输入有效值。在这种情况下,它会是这样的:

["ROLE_ADMIN"]
Run Code Online (Sandbox Code Playgroud)

代替:

ROLE_ADMIN
Run Code Online (Sandbox Code Playgroud)

此外,您选择的列类型不正确。虽然是MariaDb 的JSON别名,但在类型列上添加了约束。正如您链接的文档中所解释的:LONGTEXTJSON

为了确保插入有效的json文档,可以使用JSON_VALID函数作为CHECK约束。对于使用 MariaDB 10.4.3 中的 JSON 别名的类型,会自动包含此约束。

这会提醒您手动输入的数据不是有效的 JSON 文档。

绝对不需要更改getRoles()您显示的默认方法。如果您使用 JSON 类型作为属性(如错误所示),那么该方法可以完美地工作。