orWhere子句优化



我的代码块是这样的:

$articulos = Articulo::select('id', 'descripcion', 'status', 'codigo_interno', 'codigo_comercial', 'unidad_medida', 'impuestos_compra', 'validar_peso')
->where('descripcion','like', '%' . $palabra_buscar . '%')->where('status', 'activo')
->orWhere('codigo_interno','like', '%' . $palabra_buscar . '%')->where('status', 'activo')
->orWhere('codigo_comercial','like', '%' . $palabra_buscar . '%')->where('status', 'activo')
->get()

我想通过避免使用大量的->where('status', 'activo')来改进这段代码语句。

我这样做是因为如果我在查询末尾写->where('status', 'activo'),那么唯一有效的语句是最后一条。看起来orWhere子句重置了查询。

谢谢。

是否尝试使用闭包?

$articulos = Articulo::select('id', 'descripcion', 'status', 'codigo_interno', 'codigo_comercial', 'unidad_medida', 'impuestos_compra', 'validar_peso')
->where('status', 'activo')
->where(function($query){
$query
->orWhere('descripcion','like', '%' . $palabra_buscar . '%')
->orWhere('codigo_interno','like', '%' . $palabra_buscar . '%')
->orWhere('codigo_comercial','like', '%' . $palabra_buscar . '%');
})
->get();

首先通过activo筛选查询优化,从它开始,您将在第二个只对activo条目进行筛选。(希望这能让你明白)。

$articulos = Articulo::select('id', 'descripcion', 'status', 'codigo_interno', 'codigo_comercial', 'unidad_medida', 'impuestos_compra', 'validar_peso')
->where('status', 'activo')
->Where(function($query)use($palabra_buscar) {
$query->where('descripcion','like', '%' . $palabra_buscar . '%')
->orWhere('codigo_interno','like', '%' . $palabra_buscar . '%')
->orWhere('codigo_comercial','like', '%' . $palabra_buscar . '%');
})
->get();

请尝试一下

$articulos = Articulo::select('id', 'descripcion', 'status', 'codigo_interno', 'codigo_comercial', 'unidad_medida', 'impuestos_compra', 'validar_peso')
->where('descripcion','like', '%' . $palabra_buscar . '%')
->orWhere('codigo_interno','like', '%' . $palabra_buscar . '%')
->orWhere('codigo_comercial','like', '%' . $palabra_buscar . '%')
->where('status', 'activo')
->get()

最新更新