我在数据库中有一些 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/