ThinkPHP中使用Mysql的json语法中的JSON_CONTAINS进行查询

发布时间:2024-03-19浏览次数:132 次
在ThinkPHP框架中,虽然支持json,但是仅仅是提供了写入和查询时,自动转化的功能,如:写入:$res = Test::json(['info'])-&g

在ThinkPHP框架中,虽然支持json,但是仅仅是提供了写入和查询时,自动转化的功能,如:

写入:

$res = Test::json(['info'])->save($data);

此时的json其实是将info字段进行了json_encode操作,而读取数据时:

Test::json(['info'])->where('info->job','美术家')->find();

此时的json相当于是将读取出来的数据中的info字段进行了json_decode操作。

然而,在实际使用时,对JSON字段,我们还有很多其他的操作,本篇就来讲讲,当json是一个数组时,如何使用JSON_CONTAINS的方法:

在thinkphp中,使用json_contains需要借助whereExp或者whereRaw的形式:

Role::whereRaw("JSON_CONTAINS(rules, '\"4\"')")->select(); // 正确
Role::whereRaw('JSON_CONTAINS(rules, "4")')->select(); // 错误
Role::whereRaw("JSON_CONTAINS(rules, '4')")->select(); // 错误

之所以第一种写法是正确的,而其他写法是错的,是因为JSON_CONTAINS函数的第二个参数要求是json格式,即便是文本,也应该是json文本,即使用双引号包裹的内容。

扫一扫,在手机上查看