如何基于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
相关产品推荐
相关产品推荐

