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

如何在Eloquent Where子句中使用类似通配符语法实现多字符串匹配查询

解决Laravel查询中匹配多个状态的需求

嘿,我来帮你搞定这个查询需求!你之前用LIKE '%New%'做模糊匹配,但其实你要的是精确匹配两种明确的状态值,这里有两种更合适的方案:

方案一:用whereIn实现简洁的多值匹配

这是最推荐的写法,专门对应“匹配多个明确值”的场景,代码简洁且逻辑清晰:

$requests = DB::table('requests')
    ->select('requestDate','requestTime','status','requestID')
    ->where('requestorID', '=', $userID)
    ->whereIn('status', ['New', 'Scheduled']) // 传入要匹配的状态数组
    ->get();

这个方法会生成SQL:

WHERE requestorID = ? AND status IN ('New', 'Scheduled')

它比LIKE更精准——不会误匹配类似NewPending这种包含"New"的其他状态,完全符合你要筛选New或Scheduled的需求。

方案二:用闭包+orWhere实现OR逻辑

如果以后你需要给这两个状态添加更复杂的附加条件,可以用闭包把OR逻辑包裹起来,避免和其他查询条件冲突:

$requests = DB::table('requests')
    ->select('requestDate','requestTime','status','requestID')
    ->where('requestorID', '=', $userID)
    ->where(function ($query) {
        $query->where('status', 'New')
              ->orWhere('status', 'Scheduled');
    })
    ->get();

生成的SQL是:

WHERE requestorID = ? AND (status = 'New' OR status = 'Scheduled')

这种写法的优势是逻辑隔离,后续如果要给New状态加额外筛选(比如where('requestDate', '>', now())),直接在闭包里加就行,不会影响外层的查询条件。

最后提醒一下:尽量别用LIKE来匹配明确的枚举值,模糊匹配不仅效率低,还容易带来意料之外的结果,精确匹配才是这里的最优解~

内容的提问来源于stack exchange,提问作者Convert.ToInt32

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 01:27:35