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

Laravel 5.8如何查询meta字段JSON数据中匹配指定form_id的记录

原代码错误原因

  • MySQL JSON_CONTAINS 函数语法使用错误,正确结构为 JSON_CONTAINS(字段名, 待匹配JSON值, 匹配路径),原代码缺少语法闭合、路径参数,参数传递顺序也不符合要求
  • 字段名meta被双引号包裹,会被MySQL识别为普通字符串而非表字段,无法匹配实际存储的JSON数据

正确实现方案

方案1:Laravel 原生 JSON 查询(推荐)

Laravel 5.8 已经内置JSON字段查询支持,写法最简洁:

$formId = request()->id;
$query->where('meta->form_id', $formId);

该方案要求运行环境为 MySQL 5.7 及以上版本,符合当前主流服务环境要求,查询结果和你的表结构匹配,传入id=31时会返回id为1、2的两条记录。

方案2:修正后的原生SQL写法

如果你需要手写原生SQL实现,正确写法如下:

$formId = request()->id;
$query->whereRaw('JSON_CONTAINS(meta, ?, \'$."form_id"\')', [json_encode($formId)]);
  • 待匹配的值需要用json_encode处理为JSON格式,符合JSON_CONTAINS的参数要求
  • 第三个参数指定匹配路径$."form_id",精准定位JSON中的form_id键

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:39:03