实体:
//...
/**
* @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之前看起来没问题)。它仅在数据库中不正确,并且只有在我尝试对其进行编码时才会出错。有趣的是,将数组直接传递给setParams就足够了,而且Doctrine正确地保存了它...
有人能解释一下为什么吗?
json_array现在json(谢谢Stephan Vierkant)
是一种用于将php数组/对象作为序列化json存储到数据库中的学说类型。
您应该将参数设置为数组而不是json,并且不应该在getP中的setParams或json_decode中调用json_encode($ params)。学说将为你做所有肮脏的工作。
function setParams(array $params)
{
$this->params = $params;
}
为什么要将它作为实体中的数组并在数据库中序列化?