ThinkPHP的whereJsonContains怎么查JSON字段?条件数组怎么传?
thinkphp中使用wherejsoncontains查询json字段时,直接传入目标值即可,框架会自动处理json编码。对于包含多个值的匹配,可以传入一个数组,表示“或”的关系,即只要json数组中包含数组中的任意一个元素就会匹配成功。

如何查询JSON数组中包含特定字符串的记录?
当需要查找JSON字段(如tags)中包含特定字符串(如'php')的记录时,只需将该字符串作为第二个参数传递给whereJsonContains方法。该方法会将输入值序列化为JSON格式并与数据库中的JSON字段进行比对。

$model = new App\Model\Article();
// 查询 tags JSON 数组中包含 'php' 的记录
$result = $model->whereJsonContains('tags', 'php')->select();
print_r($result);
假设数据库中有一条记录的 tags 字段值为 ["php", "laravel"],上述代码将返回该记录。如果 tags 为 ["java", "go"],则不会匹配。
如何查询JSON数组中包含多个值之一的记录?
如果需要查找JSON字段中包含任意一个指定值的记录,可以将这些值组成一个数组传入。例如,查找 tags 中包含 'php' 或 'python' 的记录,传入数组 ['php', 'python']。这相当于SQL中的 OR 逻辑。

$model = new App\Model\Article();
// 查询 tags JSON 数组中包含 'php' 或 'python' 的记录
$result = $model->whereJsonContains('tags', ['php', 'python'])->select();
print_r($result);
如果某条记录的 tags 为 ["java", "python"],它将被匹配,因为包含了数组中的 'python'。如果 tags 为 ["c++", "rust"],则不匹配。
基于程序中某个输入、条件或结果的具体问题
在上面的示例中,我们使用了具体的输入值 'php' 和 ['php', 'python']。如果传入的值在JSON数组中不存在,或者JSON字段本身为NULL,whereJsonContains 会如何处理?
如果JSON字段为NULL,大多数数据库驱动下,whereJsonContains 可能无法正确匹配,具体取决于底层PDO的行为,通常建议在使用前确保字段非空或使用 whereNotNull 联合查询。如果传入的值不在JSON数组中,查询结果为空集,这是符合预期的行为。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











