实体:
//...
/**
* @ORM\Column(type="json_array", nullable=true)
*/
protected $params = null;
function setParams($params)
{
$this->params = $params; //json_encode($params);
}
表单类型:
//...
->add('params', null, array(
'required' => false,
))
所以,没什么不寻常的。上面的代码工作正常。但是当我将setParams方法中的行更改为" json_encode($ params);" (参见右边的PHP注释),我在DB中收到了斜杠(当我转储var时,它在存储到DB之前看起来没问题)。它仅在DB中不正确,并且只有在我尝试对其进行编码时才会出错。有趣的是,将数组直接传递给setParams就足够了,而且Doctrine正确地保存了它...
有人能解释我为什么吗?
答案 0 :(得分:1)
json_array 现在 json (谢谢Stephan Vierkant)
是一种用于将php数组/对象作为序列化json存储到数据库中的学说类型。
您应该将参数设置为数组而不是json,并且不应该在getP中的setParams或json_decode中调用json_encode($ params)。学说会为你完成所有肮脏的工作。
function setParams(array $params)
{
$this->params = $params;
}
为什么要将它作为实体中的数组并在数据库中序列化?