0

introducir la descripción de la imagen aquíd Hola comunidad, Tengo una funcion de listar ordenes donde por medio del request obtengo los valores que envio en unos input de busqueda, cuando envio un valor por ejemplo de codigo de documento me busca el registro; siempre y cuando no coloque las lineas de orwhere para los siguientes campos, como podria hacer para que mi consulta permita devolver el registro asi no envie algun dato en un input. Dejo codigo y vista.

Cuando comento los demas orwhere me realiza la busqueda por co_document; pero cuando quito esas lineas no me realiza la busqueda porque estoy mandando como null en los siguientes where de mi consulta.

 public function listorders(Request $request){
     $orders = Order::where('cod_document','like','%'.$request->cod_document.'%')
                                //->orwhere('business','like','%'.$request->business.'%')
                                //->orwhere('start_date','like','%'.$request->start_date.'%')
                                //->orwhere('status','like','%'.$request->status.'%')
                                ->orderby('cod_document')
                                ->paginate();
}

Si pudieran ayudarme a armar una mejor consulta para filtrar solo cuando el campo este con valor y los demas no. Gracias

7
  • Me parece que lo correcto sería verificar qué campos recibiste en $request y en base a eso construir la consulta y no al revés. Es decir, si en $request recibiste el parámetro tal, la consulta se hará sólo con tal, si recibiste tal y tal, la consulta se hace con tal y tal y si recibiste tal, tal y tal, la consulta se hace con tal, tal, y tal... etc.
    – A. Cedano
    Commented el 14 may. 2023 a las 18:32
  • Aquí por ejemplo puedes ver una forma de construir una consulta dinámica.
    – A. Cedano
    Commented el 14 may. 2023 a las 18:35
  • Estaba buscando y dijeron para el condicional usará when comí podría armarlo Commented el 14 may. 2023 a las 19:12
  • Estaba probando esta forma con when para hacer la condicion public function listorders(Request $request){ $orders = Order::where('cod_document','like','%'.$request->cod_document.'%') ->when(!is_null($request->business), function($query){ $query->where('business','like','%'.$request->business.'%') }) ->orderby('cod_document') return response()->json($orders); Commented el 14 may. 2023 a las 19:16
  • 1
    Buen día, en esta pregunta se trata el mismo tema y en la respuesta se da un ejemplo del uso de when. ¿Responde esto a tu pregunta? ¿Cómo hacer una consulta eloquent con diferentes filtros? Commented el 14 may. 2023 a las 19:20

0

Examina otras preguntas con la etiqueta o formula tu propia pregunta.