Laravel中如何用Eloquent查询array类型字段包含指定值的记录
Eloquent检索array类型字段包含指定值的实现方案
根据你使用的数据库类型,可选择对应的实现方式:
情况1:使用MySQL 5.7+(area字段为JSON类型)
直接调用Eloquent原生的whereJsonContains方法即可:
// 检索area字段包含10的药店,提取id转为数组 $pharmacyIds = \App\Models\Pharmacy::whereJsonContains('area', 10) ->pluck('id') ->toArray();
执行后得到的$pharmacyIds就是你期望的[1,3]结果。
情况2:使用PostgreSQL(area字段为原生array类型)
可以用PostgreSQL的数组包含操作符@>配合whereRaw实现:
$pharmacyIds = \App\Models\Pharmacy::whereRaw('area @> ARRAY[?]::int[]', [10]) ->pluck('id') ->toArray();
补充说明
- 如果你已经在Pharmacy模型里将
area字段配置了array类型的强制转换(也就是在模型的$casts数组里加了'area' => 'array'),上述两种写法都不需要额外调整参数格式。 pluck('id')方法会直接提取符合条件的记录id字段,调用toArray()后直接返回索引数组,完全匹配你需要的返回格式。
内容的提问来源于stack exchange,提问作者afsara_ben
相关产品推荐
相关产品推荐

