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.
相关产品推荐
相关产品推荐

