在laravel中保存JSON字符串

时间:2015-12-29 18:12:11

标签: php json laravel eloquent laravel-5.1

我正在尝试将JSON字符串保存到数据库中。

这是我得到的错误:

exception 'ErrorException' with message 'preg_replace(): Parameter mismatch, pattern is a string while replacement is an array

这就是我的JSON的样子:

"metadata": {
      "is_ivr": 0,
      "is_upgradable": 1,
      "is_sms": 0,
      "is_design": 0,
      "threshold_amount": 0,
      "post_threshold": 0,
      "pre_threshold": 0
    }

我想将元数据的值保存为字符串。

我试过这样做:

$data = $request->input('data');
$data['metadata'] = json_encode($data['metadata']);

dd($data);

的结果
array:8 [
  "product_name" => "Pulse"
  "parent_product" => 0
  "product_description" => "goes here"
  "metadata" => array:7 [
    "is_ivr" => 0
    "is_upgradable" => 1
    "is_sms" => 0
    "is_design" => 0
    "threshold_amount" => 0
    "post_threshold" => 0
    "pre_threshold" => 0
  ]
  "price_period" => 1
  "price_variation" => 2
  "outlet_pricing" => 0
  "status" => 1
  ]
]

3 个答案:

答案 0 :(得分:5)

说实话,我不知道目前正在发生什么,但打开你的模型(因为你还没有表现出来,我不知道它的名字)并填写:

protected $casts = [
    'metadata' => 'array',
];

假设你还没有完成它。

现在,当您将数据插入数据库时​​,请不要使用任何json_encode,只需使用:

$data = $request->input('data');

$data['metadata'] = json_encode($data['metadata']);

使用casts属性Laravel会在插入数据库时​​自动将数组数据转换为json,并在从数据库获取数据时自动运行json_decode以获取数组。

答案 1 :(得分:1)

在将JSON保存到数据库之前,您需要序列化数据,例如:

window.addEventListener('keyup', function (e) {
        myGameArea.keys[e.keyCode] = false; 
    })

现在,如果您想从数据库重用PHP中的数据,则需要运行相反的反序列化。

$data = serialize( json_encode( $data['metadata'] ) );
// Insert $data into the DB

这将允许您保存数组等数据结构。 From the PHP documentation

  

生成值的可存储表示。

答案 2 :(得分:0)

使用Smith Jim: First Born Joe: Enjoys playing outside Jon: Straight A student Barnes Mike: Just got his license Dan: On vacation Ken: Going to graduate school Thompsons James: Loves sports Ben: Middle Child Frank: Youngest child 并用逗号分隔,或者如果您希望通过直接调用其索引来访问数组的属性Implode();

发生的事情是你在数组上调用正则表达式而不是值。