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

Laravel 8/Eloquent查询MySQL多维JSON字段的正确方式

正确的查询方法

你的attributes字段存储的是以UUID为键的JSON对象,而非JSON数组,而whereJsonContains仅适用于JSON数组的包含查询,因此之前的写法无法生效。可以通过MySQL的JSON_SEARCH函数结合Laravel的查询构造器实现需求:

方法一:使用whereRaw直接调用MySQL函数

Product::whereRaw('JSON_SEARCH(attributes, "one", "Petrol Blue", null, "$.*.title") IS NOT NULL')->get();

参数说明:

  • "one":表示查找第一个匹配的结果(若需要匹配所有符合项可改为"all")
  • "Petrol Blue":要搜索的目标值
  • $.*.title:JSON路径,表示匹配根对象下所有子对象的title字段

方法二:结合DB::raw与闭包

use Illuminate\Support\Facades\DB;

Product::where(function ($query) {
    $query->whereNotNull(DB::raw('JSON_SEARCH(attributes, "one", "Petrol Blue", null, "$.*.title")'));
})->get();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 02:57:52