Consulta com parâmetros dinâmicos

Aurélio Oliveira Criador 05/03/2019
Aurélio Oliveira

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.

 

Manager Carlos Ferreira 05/03/2019
Carlos Ferreira

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);
    }
})

Criador Aurélio Oliveira 09/03/2019
Aurélio Oliveira

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.

Manager Carlos Ferreira 11/03/2019
Carlos Ferreira

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]);
    }
})

Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!