I was working and I came across the following situation:
if (($entrada == null) and ($parcela == null)) {
$cotas = Produto::orderBy('credito', 'DESC')
->where('id_subcategoria', $subcategoria)
->where('visivel_site', self::SIM)
->where('credito', '<=', Utils::calculaPorcentagem($porcentagem, $credito))
->get();
} elseif ($parcela == null) {
$cotas = Produto::orderBy('credito', 'DESC')
->where('id_subcategoria', $subcategoria)
->where('visivel_site', self::SIM)
->where('credito', '<=', Utils::calculaPorcentagem($porcentagem, $credito))
->where('entrada', '<=', Utils::calculaPorcentagem($porcentagem, $entrada))
->get();
} elseif ($entrada == null) {
$cotas = Produto::orderBy('credito', 'DESC')
->where('id_subcategoria', $subcategoria)
->where('visivel_site', self::SIM)
->where('credito', '<=', Utils::calculaPorcentagem($porcentagem, $credito))
->whereHas('saldo', function ($query) use ($parcela, $porcentagem) {
$query->where('parcela', '<=', Utils::calculaPorcentagem($porcentagem, $parcela));
})
->get();
} else {
$cotas = Produto::orderBy('credito', 'DESC')
->where('id_subcategoria', $subcategoria)
->where('visivel_site', self::SIM)
->where('credito', '<=', Utils::calculaPorcentagem($porcentagem, $credito))
->where('entrada', '<=', Utils::calculaPorcentagem($porcentagem, $entrada))
->whereHas('saldo', function ($query) use ($parcela, $porcentagem) {
$query->where('parcela', '<=', Utils::calculaPorcentagem($porcentagem, $parcela));
})
->get();
}
return $cotas;
Is there a more elegant way to create this function? That I did not repeat the code so much, I thought I would use pure SQL and go concatenating the instructions, it would be a better implementation ... remembering that I am a beginner.