tp6中如何使用json字符串作为MySQL查询条件

背景:数据表中有一个字段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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值