I would like to know if you have how to rewrite the function below in a cleaner way, without so many if / elseif.
public function pesquisa(Request $request)
{
if (! Gate::allows('celular')) {
return abort(401);
}
$marcas = CelularMarca::orderBy('nome', 'asc')->pluck('nome','id')->all();
$modelos = CelularModelo::orderBy('nome', 'asc')->pluck('nome','id')->all();
$cores = Cor::orderBy('nome', 'asc')->pluck('nome','id')->all();
$cidades = Cidade::orderBy('nome', 'asc')->pluck('nome','id')->all();
$situacoes = CelularSituacao::orderBy('nome', 'asc')->pluck('nome','id')->all();
$buscar_marca = $request['marca_id'];
$buscar_modelo = $request['modelo_id'];
$buscar_cor = $request['cor_id'];
$buscar_cidade = $request['cidade_id'];
$buscar_data_inicial = $request['data_inicial'];
$buscar_data_final = $request['data_final'];
$buscar_bou = $request['bou'];
$buscar_imei1 = $request['imei1'];
$buscar_situacao = $request['situacao_id'];
// verifica se buscou marca
if($buscar_marca) {
$buscar_todos[] = ['marca_id', $buscar_marca];
}
// verifica se buscou modelo
if($buscar_modelo) {
$buscar_todos[] = ['modelo_id', 'like', '%'.$buscar_modelo.'%'];
}
// verifica se buscou cor
if($buscar_cor) {
$buscar_todos[] = ['cor_id', $buscar_cor];
}
// verifica se buscou cidade
if($buscar_cidade) {
$buscar_todos[] = ['cidade_id', $buscar_cidade];
}
// verifica se buscou data
if($buscar_data_inicial) {
$buscar_datas[] = ['data_inicial', $buscar_data_inicial];
}
// verifica se buscou data
if($buscar_data_final) {
$buscar_datas[] = ['data_inicial', $buscar_data_final];
}
// verifica se buscou BOU
if($buscar_bou) {
$buscar_todos[] = ['bou', $buscar_bou];
}
// verifica se buscou IMEI1
if($buscar_imei1) {
$buscar_todos[] = ['imei1', 'like', '%'.$buscar_imei1.'%'];
}
// verifica se buscou situação
if($buscar_situacao) {
$buscar_todos[] = ['situacao_id', $buscar_situacao];
}
// verifica se há valores para utilizar no 'where'
if(isset($buscar_todos, $buscar_data_inicial, $buscar_data_final)){
$celulares = Celular::where($buscar_todos)
->whereBetween('data',[$buscar_data_inicial, $buscar_data_final])
->get();
}
elseif(isset($buscar_todos, $buscar_data_inicial)){
$celulares = Celular::where($buscar_todos)
->whereBetween('data',[$buscar_data_inicial, date('Y-m-d')])
->get();
}
elseif(isset($buscar_todos, $buscar_data_final)){
$celulares = Celular::where($buscar_todos)
->where('data','<=',$buscar_data_final)
->get();
}
elseif (isset($buscar_todos)) {
$celulares = Celular::where($buscar_todos)
->get();
}
elseif (isset($buscar_data_inicial, $buscar_data_final)) {
$celulares = Celular::whereBetween('data',[$buscar_data_inicial, $buscar_data_final])
->get();
}
elseif (isset($buscar_data_inicial)) {
$celulares = Celular::whereBetween('data',[$buscar_data_inicial, date('Y-m-d')])
->get();
}
elseif (isset($buscar_data_final)) {
$celulares = Celular::where('data','<=',$buscar_data_final)
->get();
}
else{
$celulares = Celular::all();
}
return view('celulares.pesquisa', compact('celulares','marcas','modelos','cores','cidades','situacoes'));
}