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

Laravel查询构建器LIKE查询问题:查询active时inactive被匹配

解决Laravel Query Builder查询status时误匹配inactive的问题

这个问题很典型——你用了LIKE '%active%'做模糊匹配,而"inactive"字符串里正好包含"active"这几个字符,所以被一起查出来了。既然不能修改字段类型,我们可以用下面几种方法解决:

方法1:使用精确匹配(推荐)

因为你的status字段取值是固定的枚举值(active、inactive、disable),完全不需要模糊匹配,直接用精确相等的条件就可以准确过滤:

$vendor = DB::table('client_vendor as cv')
    ->leftJoin('vendors as fv','fv.id','=','cv.vendor_id')
    ->select('cv.*','fv.*','cv.status')
    ->where('cv.status', 'active') // Laravel默认就是精确匹配,等价于 = 'active'
    ->get();

这种方式不仅结果准确,查询效率也比模糊匹配高很多,是最适合你的场景的方案。

方法2:处理大小写不敏感的精确匹配

如果你的数据库里status字段的值存在大小写不一致的情况(比如Active、ACTIVE),可以用whereRaw配合大小写转换函数来实现不区分大小写的精确匹配:

// MySQL/MariaDB 用法
$vendor = DB::table('client_vendor as cv')
    ->leftJoin('vendors as fv','fv.id','=','cv.vendor_id')
    ->select('cv.*','fv.*','cv.status')
    ->whereRaw('LOWER(cv.status) = ?', ['active'])
    ->get();

为什么原来的LIKE会出问题?

LIKE '%active%'的逻辑是匹配任何包含"active"子串的字符串,而"inactive"拆开来就是"in"+"active",自然会被命中。只有当你需要匹配包含某个子串的内容时才适合用这种模糊匹配,显然你的场景不需要。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:10:03