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

时间:2019-05-16 09:32:29

标签: symfony doctrine

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

{"0": "ROLE_USER"}

用户模型:

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

控制器:

$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"}

2 个答案:

答案 0 :(得分:3)

更改

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

收件人

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

那样就可以了。


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

对于学说的“ json”列,您不需要自己进行json_encode或json_decode。教义将为您解决!

流程:
1)您将给Doctrine一个数组
2)方法将对数组进行json_encode并将其保存为json_data
3):如果您请求列值,则准则将对数组进行json_decode,以便您可以再次使用该数组。


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

{"0": "ROLE_USER"}

但是我认为您将拥有这样的数据:

{"ROLE_USER"}

但是两种情况都将使用相同的数组:

array {
  0 => ROLE_USER  
}

答案 1 :(得分:0)

如果您将Doctrine用作ORM,则应使用现有的json映射类型,该映射类型将数组存储为JSON字符串并自动对数据进行反序列化。