Laravel 工厂填充数据 数据库如何保存非转义的 JSON 格式?

一个商品参数表ProductParam ,字段为param因为可能有多个参数也可能只有一个参数,我在模型中定义了
protected $casts = ['param' => 'array'];
此时通过控制器新建,数据库存储的字段如下: ["\u989c\u8272:\u767d\u8272|\u7ea2\u8272|\u7eff\u8272","\u5305\u88c5:\u5927|\u4e2d|\u5c0f","color:red|green"]
我认为此种格式是直接获取数组然后使用json_edcode() 我将数据打印出来做过对比发现是一样的.

$params = [
  '颜色:白色|黑色|绿色|红色',
  '包装:大|中|小',
  '口味:微辣|甜味|原味',
];

ProductParam::create([\
  'product_id'=>1,
  'param'=>json_encode($params)\
]);

echo json_encode($params);
return;

打印结果

 ["\u989c\u8272:\u767d\u8272|\u9ed1\u8272|\u7eff\u8272|\u7ea2\u8272","\u5305\u88c5:\u5927|\u4e2d|\u5c0f","\u53e3\u5473:\u5fae\u8fa3|\u751c\u5473|\u539f\u5473"]

然而我存进数据库的内容是

 [\"\\u989c\\u8272:\\u767d\\u8272|\\u9ed1\\u8272|\\u7eff\\u8272|\\u7ea2\\u8272\",\"\\u5305\\u88c5:\\u5927|\\u4e2d|\\u5c0f\",\"\\u53e3\\u5473:\\u5fae\\u8fa3|\\u751c\\u5473|\\u539f\\u5473\"]"

请教一下我如何在存mysql 的时候直接存储我打印结果的内容进去,因为模型中使用了$casts 我用工厂填充的数据都使用不了.
mysql版本 5.7.27

附言 1  ·  4年前

感谢大家回答,我目前的问题是打印结果存到数据库里面之后多了"\ 可以看的打印结果的\,保存到数据库里面成为了\\ ,我想取消这种转义.

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
ALMAS
最佳答案

@kangfq protected $casts = ['param' => 'array']; 你设置了casts,在保存到数据库之前本来就会帮你json_encode,可你在 ProductParam::create([\ 'product_id'=>1, 'param'=>json_encode($params)\ ]); 中手动json_encode了,那保存到数据库时又会json_encode一次,所以会出现\\

4年前 评论
kangfq (楼主) 4年前
讨论数量: 5
json_encode($params, JSON_UNESCAPED_UNICODE)
4年前 评论
ibucoin
protected $casts = [
        'data' => 'json'
];

如果是通过这种的话,重写一下Model中的asJson函数。

protected function asJson($value)
{
        return json_encode($value,JSON_UNESCAPED_UNICODE);
}

这样保存就是中文的了。

4年前 评论

感谢大家回答,我目前的问题是打印结果存到数据库里面之后多了"\可以看的打印结果的 \, 保存到数据库里面成为了\\, 我想取消这种转义.

4年前 评论
ALMAS

@kangfq protected $casts = ['param' => 'array']; 你设置了casts,在保存到数据库之前本来就会帮你json_encode,可你在 ProductParam::create([\ 'product_id'=>1, 'param'=>json_encode($params)\ ]); 中手动json_encode了,那保存到数据库时又会json_encode一次,所以会出现\\

4年前 评论
kangfq (楼主) 4年前
Sparkfly
json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!