symfony - 如何在数据库中添加JSON字段?

标签 symfony doctrine

我在数据库中有一些 JSON 字段类型(手动添加):

{"0": "ROLE_USER"}

用户型号:

/**
 * @ORM\Column(type="json")
 */
private $roles = [];

Controller :

$user->setRoles(array('{"0": "ROLE_USER"}'));

它可以将数据添加到数据库:

["{\"0\": \"ROLE_USER\"}"]

如果我在没有数组的情况下添加它 - 则会出现错误:

Argument 1 passed to App\Entity\User::setRoles()
must be of the type array, string given

我应该怎么做才能在数据库中准确地拥有 {"0": "ROLE_USER"}

最佳答案

改变

$user->setRoles(array('{"0": "ROLE_USER"}'));

$user->setRoles(["ROLE_USER"]);

这样就可以了。


你的数组声明是错误的。您将一个项目推送到数组,该项目为:{"0": "ROLE_USER"} 作为纯字符串。

对于 Doctrine “json”列,您不需要自己进行 json_encode 或 json_decode。 Doctrine 会为你解决这个问题!

流程:
1) 你给 Doctrine 一个数组
2) Doctrine 会对你的数组进行 json_encode 并将其保存在列中作为 json_data
3) 如果您请求列值, Doctrine 将对您的数组进行 json_decode,以便您可以再次使用您的数组。


您期望的目标也不正确。 您想要这样的 json_data:

{"0": "ROLE_USER"}

但我认为你会得到这样的数据:

{"ROLE_USER"}

但这两种情况都会导致相同的数组:

array {
  0 => ROLE_USER  
}

关于symfony - 如何在数据库中添加JSON字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56165344/

相关文章:

symfony - 使用 FOSOAuthServerBundle 获取刷新 token

php - MySQL 保存到数据库 Symfony2 时出错

SQL/Doctrine : Left Join problem

php - symfony 2 中的自定义存储库类不起作用

php - MATCH AGAINST 脚本不适用于 Symfony2

php - 如何在for循环中打印所有结果?

php - SF2.6 OptionsResolverInterface 已弃用和 AbstractType :setDefaultOptions

php - 自定义约束和验证器但 [ERROR] 约束验证器不存在

php - 在 FOSUserBundle 中管理用户/角色/组

for-loop - symfony2 和 twig 用于子阵列