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

Laravel查询:如何精准匹配数组数据获取cards表记录

严格匹配数组列元素的查询方案

场景说明

需要从cards表中筛选出colors列(存储为JSON数组格式)**仅包含指定颜色(White、Green)**的记录,无其他额外颜色。


Laravel 查询构造器实现

假设你使用Laravel框架,可通过以下代码实现:

$targetColors = $request->cardColor; // 对应值:["White", "Green"]
$requiredCount = count($targetColors);

$matchedCards = DB::table('cards')
    // 确保所有目标颜色都存在于colors数组中
    ->where(function ($query) use ($targetColors) {
        foreach ($targetColors as $color) {
            $query->whereJsonContains('colors', $color);
        }
    })
    // 限制colors数组的元素数量与目标颜色数量一致(避免包含额外颜色)
    ->whereRaw('JSON_LENGTH(colors) = ?', [$requiredCount])
    ->get();

原生MySQL SQL语句

如果直接使用原生SQL,可执行以下查询:

SELECT * 
FROM cards 
WHERE JSON_CONTAINS(colors, '"White"')
  AND JSON_CONTAINS(colors, '"Green"')
  AND JSON_LENGTH(colors) = 2;

逻辑说明

  1. 检查目标颜色存在:通过JSON_CONTAINS(原生SQL)或whereJsonContains(Laravel)逐一验证每个目标颜色都在colors数组内;
  2. 限制数组长度:通过JSON_LENGTH确保数组元素数量与目标颜色的数量完全一致,以此排除包含额外颜色的记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 05:14:52