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

Laravel 7中如何构造含OR条件的嵌套Where查询

Laravel 7 嵌套OR条件查询实现方案

要实现ad_afiliado表中Activo = 'S',且NombreComercial或Etiqueta模糊匹配搜索关键词的查询,需要用嵌套闭包包裹OR条件,确保逻辑分组正确。

错误的AND条件写法(需替换)

如果你的原有代码是类似这样的多AND条件:

$afiliados = DB::table('ad_afiliado')
    ->where('Activo', 'S')
    ->where('NombreComercial', 'LIKE', "%{$request->search}%")
    ->where('Etiqueta', 'LIKE', "%{$request->search}%")
    ->get();

这种写法会要求两个模糊条件同时满足,不符合需求。

正确的嵌套OR条件写法

原生查询构造器版本

$afiliados = DB::table('ad_afiliado')
    ->where('Activo', 'S')
    ->where(function ($query) use ($request) {
        // 闭包内的条件会被自动分组为OR逻辑
        $query->where('NombreComercial', 'LIKE', "%{$request->search}%")
              ->orWhere('Etiqueta', 'LIKE', "%{$request->search}%");
    })
    ->get();

Eloquent模型版本(若有对应模型)

假设你的模型名为AdAfiliado,代码如下:

$afiliados = AdAfiliado::where('Activo', 'S')
    ->where(function ($query) use ($request) {
        $query->where('NombreComercial', 'LIKE', "%{$request->search}%")
              ->orWhere('Etiqueta', 'LIKE', "%{$request->search}%");
    })
    ->get();

生成的SQL逻辑

上述代码会生成如下SQL语句,确保Activo = 'S'是全局条件,两个模糊匹配条件为OR关系:

SELECT * FROM `ad_afiliado` 
WHERE `Activo` = 'S' 
AND (`NombreComercial` LIKE '%搜索关键词%' OR `Etiqueta` LIKE '%搜索关键词%')

内容的提问来源于stack exchange,提问作者Pepe F.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:05:21