I have my block of code like this:
$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()
What I want is to improve this code by avoiding using a lot of ->where('status', 'activo') statements.
I´m doing this because if I write ->where('status', 'activo') at the end of the query, the only statement that works is the last one. It seems that the orWhere clause resets the query.
Thank you.
CodePudding user response:
Did you try by using a closure?
$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();
CodePudding user response:
start by filtering by activo for query optmisation, by starting with it yu will next on the second where filter only on activo ariculos.(hope this make sens).
$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();
CodePudding user response:
please try this
$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()