Можно ли сделать where необязательными?
я получаю данные из 4 inputs
, которые могут быть необязательными каждый. По формуле неповторенной перестановки будет 24 возможных случая.
Чтобы не делать 24 if
, есть ли способ сделать where
необязательными?
PS: чтобы избежать этого:
if(isset($asesor_input) && empty($cliente_input) && isset($grupo_input)){
$eventos = $pedido->whereIn('EV_cliente',$cliente_grupo)->whereIn('EV_asesor',$asesor_input);
}
if(isset($asesor_input) && isset($cliente_input) && empty($grupo_input)){
$eventos = $pedido->whereIn('EV_asesor',$asesor_input)->whereIn('EV_cliente',$cliente_input);
}
if(empty($asesor_input) && empty($cliente_input) && empty($grupo_input)){
$eventos = $pedido->whereIn('EV_asesor',$asesores)->whereIn('EV_cliente',$clientes);
}
if(empty($asesor_input) && isset($cliente_input) && empty($grupo_input)){
$eventos = $pedido->whereIn('EV_asesor',$asesores)->whereIn('EV_cliente',$cliente_input);
}
if(isset($asesor_input) && empty($cliente_input) && empty($grupo_input)){
$eventos = $pedido->whereIn('EV_asesor',$asesor_input)->whereIn('EV_cliente',$clientes);
}
if(empty($asesor_input) && empty($cliente_input) && isset($grupo_input)){
$eventos = $pedido->whereIn('EV_asesor',$asesores)->whereIn('EV_cliente',$cliente_grupo);
}
2 answers
После попытки понять, что вы ищете, я искал шаблон для минимизации этих сложных if и пришел к выводу, что это может быть сделано таким образом с условными выражениями, будучи гораздо более читаемым:
// Suponiendo que la consulta es al modelo Pedido,
// voy a asumir una consulta cualquiera como base
$query = Pedido::select('id', 'name');
if (isset($asesor_input)) {
$query->whereIn('EV_asesor', $asesor_input);
} else {
$query->whereIn('EV_asesor', $asesores);
}
if (isset($cliente_input)) {
$query->whereIn('EV_cliente', $cliente_input);
} elseif (isset($grupo_input) {
$query->whereIn('EV_cliente', $cliente_grupo);
} else {
$query->whereIn('EV_cliente',$clientes);
}
// finalmente hacemos la consulta
$eventos = $query->get();
Я бы поверил, что можно еще больше улучшить/упростить этот код, но для этого потребуется больше контекста, однако это хорошее начало, гораздо более понятное.
Посмотрите, можете ли вы решить это с этим, что я сделал, это синтезировать то, что вы делали в каждом блоке внутри массива, и с простым foreach делать эти операции, проблема в том, что ваши 27 условных выражений будут продолжать существовать, что теперь в виде array:
$datos = [
[
'condicion' => isset($asesor_input) && empty($cliente_input) && isset($grupo_input),
'dato1' => 'EV_cliente',
'valor1' => $cliente_grupo,
'dato2' => 'EV_asesor',
'valor2' => $asesor_input
],
[
'condicion' => isset($asesor_input) && isset($cliente_input) && empty($grupo_input),
'dato1' => 'EV_asesor',
'valor1' => $asesor_input,
'dato2' => 'EV_cliente',
'valor2' => $cliente_input
],
[
'condicion' => empty($asesor_input) && empty($cliente_input) && empty($grupo_input),
'dato1' => 'EV_asesor',
'valor1' => $asesores,
'dato2' => 'EV_cliente',
'valor2' => $clientes
],
[
'condicion' => empty($asesor_input) && isset($cliente_input) && empty($grupo_input),
'dato1' => 'EV_asesor',
'valor1' => $asesores,
'dato2' => 'EV_cliente',
'valor2' => $cliente_input
],
[
'condicion' => isset($asesor_input) && empty($cliente_input) && empty($grupo_input),
'dato1' => 'EV_asesor',
'valor1' => $asesor_input,
'dato2' => 'EV_cliente',
'valor2' => $clientes
],
[
'condicion' => empty($asesor_input) && empty($cliente_input) && isset($grupo_input),
'dato1' => 'EV_asesor',
'valor1' => $asesores,
'dato2' => 'EV_cliente',
'valor2' => $cliente_grupo
],
];
foreach($datos as $dato) {
if($dato['condicion']) {
$eventos = $pedido->whereIn($dato1, $valor1)->whereIn($dato2, $valor2);
}
}
В любом случае взгляните на предложение when