赞
踩
背景:数据表中有一个字段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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。