[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Roberto Noya
Criador Roberto Noya 14/05/2019

Olá Equipe Especializa TI,

Tenho acompanhado o trabalho de vocês no Youtube e depois de assistir os videos de Laravel 5.3 e 5.5 resolvi colocar a mão na massa e contratar a assinatura do portal. 

Estou criando um sistema próprio onde consegui realizar o INSERT, UPDATE e o DELETE com sucesso. Também criei uma listagem de registros conforme um único parametro de pesquisa chamado STATUS, que funciona perfeitamente.

Estou tendo dificuldades de criar uma tela com vários parametros de pesquisa. No caso seria um Form com metodo GET o qual o resultado da pesquisa respeitará os filtros selecionados.

Eu criei no controller uma uma function chamada "list"que recebe o filtro Status através do metodo GET. A url que chama esse controler é http://local.financial/admin/client/list/1 e funciona perfeitamente.

public function list(Request $request){

        $status  = addslashes($request->status);

        $clients = DB::table('clients')

            ->select('id',  'nome_fantasia', ...)

            ->where('status', $status)

            ->paginate($this->totalPage);

        return view('admin.client.list', compact('clients'));

    } 

Gostaria de aproveitar essa função "list" e agregar outros filtros de pesquisa. Assim sendo, o sistema teria checar se determinado filtro foi preenchido com um valor válido e aplicar na query sql.

Seria algo como:

if( isset($request->status) ){

 if($request->status > 0){

 ->where('status', $status)

 }

}

 

Agradeço o apoio.

Roberto

 

Manager Carlos Ferreira 14/05/2019

Olá, Roberto!
Tudo bem?

Primeiramente, quero te agradecer pela confiança. Saiba que é um prazer enorme lhe receber em nossa plataforma.

O Laravel é extremamente poderoso no quesito manipulação de banco de dados também.

O método where permite aplicar filtros condicionais baseados em parâmetros recebidos ou não. Para ficar mais fácil de entender, segue um exemplo prático:
public function list(Request $request)
{
    $clients = DB::table('clients')
                ->select('id',  'nome_fantasia', ...)
                ->where(function($query) use ($request) {
                    if ($request->status > 0) {
                        $query->where('status', $request->status);
                    }
                })
                ->paginate($this->totalPage);

    return view('admin.client.list', compact('clients'));
}

Esse exemplo só vai aplicar o filtro where caso o parâmetro status o valor seja diferente maior que 0.

Carlos Ferreira
Criador Roberto Noya 14/05/2019

Olá Carlos,

Deu certo!

Agora consigo pesquisar utilizando vários parâmetros de pesquisa.

 

Surgiu outra dúvida. Como o LARAVEL trata possíveis ataques SQL Injection que poderão estar presentes nas informações REQUEST (GET, POST...)?

 

Atte. 

 

 

Roberto Noya
Manager Carlos Ferreira 14/05/2019

O Laravel utiliza de forma transparente o PDO, portanto, isso garante que ataques como SQL Injection não prejudiquem a nossa aplicação Laravel.

Carlos Ferreira
Criador Roberto Noya 14/05/2019

Bacana.

 

Isso poupará muito trabalho. Obrigado

Roberto Noya
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!