我在数据库中有一些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"}
?
答案 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字符串并自动对数据进行反序列化。