背景:数据表中有一个字段err_info存的是json字符串,现在需要根据接口传过来的参数(json数据)作为条件去查询数据。
接口参数类似下面这种结构
{
"id":1,
"sid":2,
"img":"xxxx",
"num":3,
"diy":"9999",
"pri":86,
"spec":{
"colour": "1",
"word": "7",
"img": "13",
"size": 21
}
}
数据库中存的数据如下:
{
"colour": "1",
"word": "7",
"img": "13",
"size": 21
}
最开始的想法是把spec的值转成字符串作为查询条件去操作,但是查不到。这个方法行不通,tp对字符串进行了转义操作。
查了tp6文档,有了下面的代码,使用这种方式能够实现json数据作为查询条件的功能
不过有一点要注意:MySQL版本必须要5.7以上。使用select version(); 可以查看MySQL版本
$params = file_get_contents('php://input'); // 接收参数
$arr = (json_decode($params, true)); //转为数组
$res = Db::name(strtolower('jddoubleeggs_error_log'))->json(['err_info'])
->where('err_info->colour', $arr['spec']['colour'])
->where('err_info->word', $arr['spec']['word']) //
->where('err_info->img', $arr['spec']['img'])
->where('err_info->size', $arr['spec']['size'])
->find();
var_dump($res);die();
如果您觉得哪里有问题,欢迎提出!
author:fb