You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel使用json_extract/whereJsonContains查询JSON字段返回null的解决方法

问题原因与解决方法

你的extra_data字段中,type存储的是字符串类型的"1",但你查询时用了数字1,类型不匹配导致无法返回结果。以下是正确的查询方式:

方式1:使用whereJsonContains匹配字符串值

$formElements = FormElement::whereJsonContains('extra_data', ['type' => '1'])->get();

如果需要结合whereIn筛选ID:

$formElements = FormElement::whereIn('id', $extraData)
    ->whereJsonContains('extra_data', ['type' => '1'])
    ->get();

方式2:直接访问JSON字段(Laravel原生支持)

这是最简洁的写法,Laravel会自动处理JSON字段的解析:

$formElements = FormElement::where('extra_data->type', '1')->get();

结合whereIn的版本:

$formElements = FormElement::whereIn('id', $extraData)
    ->where('extra_data->type', '1')
    ->get();

方式3:使用DB::raw(适合复杂场景)

如果需要用原生JSON函数,注意匹配字符串格式,或者使用JSON_UNQUOTE去掉引号:

// 直接匹配带引号的字符串结果
$formElements = FormElement::where(DB::raw("json_extract(extra_data, '$.type')"), '"1"')->get();

// 用JSON_UNQUOTE转换为无引号的字符串后匹配
$formElements = FormElement::where(DB::raw("JSON_UNQUOTE(json_extract(extra_data, '$.type'))"), '1')->get();

内容的提问来源于stack exchange,提问作者bhdrnzl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 07:50:23