Consulta com parâmetros dinâmicos
Boa tarde Carlos,
Estou desenvolvendo um projeto aparte das aulas para evoluir e cheguei em um ponto onde tenho a necessidade de fazer essa consulta:$resultado = DB::select("
SELECT
a.id,
a.abertura,
s.nome,
u.name,
a.status,
a.imagem
FROM `atendimentos` a
left join `users`u on u.id = a.user_responsavel_id
left join `setors` s on s.id = a.setor_id
WHERE a.user_responsavel_id = :param1 and a.setor_id = :param2 and a.status = :param3
order by a.id desc
"
,
[
"param1" => $idResponsavel,
"param2" => auth()->user()->setor_id,
"param3" => $status
]
);
A cunsulta esta funcionando o problema é que tanto o parametro1 quanto o parametro3 podem ser mudados opcionalmente para todos ( * ). Ou seja a pessoa pode querer listar somente um status específico ou todos os status, da mesma forma o responsável ($idResponsavel), somente um ou todos.
Como fazer para que os parametros fiquem dinamicamente preenchidos? Ou existe uma forma de indicar que um parametro seja * por exemplo?
Mais uma vez muito obrigado.
Olá, Aurélio!
Não recomendo que faça a consulta dessa forma, mas sim, explore os recursos do Eloquent e trabalhe com relacionamentos de tabelas, a fim de obter um resultado mais produtivo.
Faça esse curso, certamente ele vai te ajudar a elevar a qualidade das suas consultas ao banco de dados: https://academy.especializati.com.br/curso/laravel-relacionamentos-tabelas-gratis
Porque se usar o Eloquent, ou até mesmo o Query Builder é possível fazer filtros (where) dinamicamente, assim:
->where(function($query) use ($variavel) {
if ($variavel) {
$query->where('nomecoluna', '=', $variavel);
}
})
Obrigado Carlos,
Tem algum exemplo com um where com um campo data inicio, data final vindo de um formulário de filtro, sendo que esses campos poderiam ficar em branco para filtrar por qualquer período?
Já mudei todas as minhas consulta utilizando o Eloquent bem como Query Builder para aproveitar melhor os recursos.
Acredito que fez bem usar o Eloquent e o Query Builder.
É possível, seguindo mais ou menos a mesma linha que passei no último exemplo, veja um exemplo:
->where(function($query) use ($request) {
if ($request->data_inicio && $request->data_final) {
$query->whereBetween('date', [$request->data_inicio, $request->data_final]);
}
})
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!