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

如何基于JSON类型gender列的值查询Laravel Eloquent Product模型

你原来的写法存在错误:json_decode('men', true)无法解析出合法值('men'不是标准JSON格式字符串),所以查询条件完全无效,正确实现如下:

前置配置

首先确认Product模型已经配置了gender字段的JSON类型转换,这是Laravel操作JSON字段的基础:

// App/Models/Product.php
protected $casts = [
    'gender' => 'array',
    // 其余字段的类型转换规则
];
具体查询实现

筛选gender包含men的产品

直接使用Laravel提供的whereJsonContains方法查询JSON数组包含指定值的记录:

public function index()
{     
    $products = Product::whereJsonContains('gender', 'men')
        ->orderBy('created_at', 'desc')
        ->get();
}

筛选gender包含men 或 women的产品

如果需要匹配两个性别中的任意一个,嵌套闭包写or查询即可:

public function index()
{     
    $products = Product::where(function ($query) {
            $query->whereJsonContains('gender', 'men')
                ->orWhereJsonContains('gender', 'women');
        })
        ->orderBy('created_at', 'desc')
        ->get();
}
注意事项
  • 该方法要求数据库版本支持JSON字段操作:MySQL >= 5.7、PostgreSQL >= 9.4、SQLite >= 3.38.0 均原生支持
  • 如果你数据库中存储的gender值是本地化字符串(比如你示例里的波斯语值),需要把查询条件中的men/women替换为实际存储的对应字符串,否则会匹配不到结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:06:05