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

Laravel Eloquent中如何使用where()匹配数组字段与传入数组

嘿,这个场景我之前在项目里碰到过,Laravel Eloquent针对JSON数组字段的查询有几种实用的处理方式,根据你的具体需求不同可以选对应的方法,我给你详细拆解下:

1. 精确匹配整个数组(元素+顺序完全一致)

如果你的需求是让specification_items字段的数组和请求传入的$request->specification数组完全相同(包括元素的顺序),可以用Laravel专门提供的whereJsonEquals方法,它会自动处理JSON格式的匹配:

$specifications = $request->specification;
$results = SpecificationItemGroup::whereJsonEquals('specification_items', $specifications)->get();

这个方法会生成适配数据库的SQL(比如MySQL里会用JSON_EQUAL函数),确保字段里的数组和你传入的数组完全匹配。

2. 匹配包含所有传入元素的数组(不关心顺序)

如果你的需求是specification_items数组包含所有传入的元素(不管字段里有没有其他额外元素,也不关心元素顺序),可以通过循环调用whereJsonContains来实现:

$specifications = $request->specification;
$query = SpecificationItemGroup::query();

foreach ($specifications as $spec) {
    $query->whereJsonContains('specification_items', $spec);
}

$results = $query->get();

这段代码会给每个传入的元素添加一个JSON_CONTAINS条件,确保所有元素都存在于字段的数组中。

如果你想用更简洁的写法,也可以用whereRaw配合数据库的JSON函数(适合MySQL 8.0.17+版本):

$specifications = $request->specification;
$placeholders = implode(', ', array_fill(0, count($specifications), '?'));
$results = SpecificationItemGroup::whereRaw(
    "JSON_CONTAINS(specification_items, JSON_ARRAY($placeholders))",
    $specifications
)->get();
3. 匹配包含任意一个传入元素的数组

如果只要specification_items数组里有任意一个传入的元素就算匹配,你可以循环调用orWhereJsonContains:

$specifications = $request->specification;
$query = SpecificationItemGroup::query();

foreach ($specifications as $spec) {
    $query->orWhereJsonContains('specification_items', $spec);
}

$results = $query->get();

或者用MySQL的JSON_OVERLAPS函数(8.0.17+支持)来简化:

$specifications = $request->specification;
$placeholders = implode(', ', array_fill(0, count($specifications), '?'));
$results = SpecificationItemGroup::whereRaw(
    "JSON_OVERLAPS(specification_items, JSON_ARRAY($placeholders))",
    $specifications
)->get();

注意事项

如果你的specification_items字段不是JSON类型,而是用PHP序列化字符串存储的(比如serialize()),这种情况不推荐继续使用,建议改成JSON字段类型。如果实在要处理,可以用whereRaw配合数据库的字符串函数,但这种方式性能较差且容易出问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 19:22:36