存储在DB问题中的Json数组 - 为什么在编码时使用斜杠

问题描述 投票:-1回答:1

实体:

//...
/**
 * @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正确地保存了它...

有人能解释一下为什么吗?

php json forms symfony doctrine
1个回答
1
投票

json_array现在json(谢谢Stephan Vierkant)

是一种用于将php数组/对象作为序列化json存储到数据库中的学说类型。

您应该将参数设置为数组而不是json,并且不应该在getP中的setParams或json_decode中调用json_encode($ params)。学说将为你做所有肮脏的工作。

function setParams(array $params)
{
    $this->params = $params;
}

为什么要将它作为实体中的数组并在数据库中序列化?

  1. 操作本机php数组比json更快/更容易
  2. 某些数据库引擎允许您在json字段内搜索
  3. 使用数据库管理系统比使用序列化的php或xml更容易编辑
© www.soinside.com 2019 - 2024. All rights reserved.