Laravel + Ajax - Pesquisar registros?

Como faço para utilizar mais de 1 parâmetro para filtros?

Estava seguindo um tutorial que achei na Internet e apliquei no meu projeto, está funcionando porém só conseguir fazer funcionar quando passo um único parâmetro para filtro, vou deixar o código exatamente como fiz:

<input name="data[search]" 
	class="form-control" 
	name="search" 
	id="search" type="text" 
	placeholder="Sala">

<script type="text/javascript">
  $('#search').on('keyup',function(){
	  $value=$(this).val();
	  $.ajax({
	  type : 'get',
	  url : '{{URL::to('ListaSalasLocal')}}',
	  data:{'search':$value},
	  success:function(data){
		$('tbody').html(data);
	  }
	  });
  })
  </script>
  <script type="text/javascript">
  $.ajaxSetup({ headers: { 'csrftoken' : '{{ csrf_token() }}' } });
</script>

public function show(Request $request){
	if($request->ajax())
    {

        $output="";
		
        $ListaSalas = DB::table('salas') 
        ->select('sal_codigo','sal_descricao')
        ->where('sal_descricao','LIKE','%'.$request->search."%")
        ->where('emp_codigo', '=', session('empresa_id'))
        ->orderBy('sal_descricao')
        ->paginate(10);   
        
        if($ListaSalas)
        {
            foreach ($ListaSalas as $key => $ListaSalas){
			    $output.='<tr>'.

				'<td>'.$ListaSalas->sal_descricao.'</td>'.
				'<td Class="btnLoc"><a href="/salas/editar/'.$ListaSalas->sal_codigo.'"class="btn btn-success btnLoc" role="button" aria-pressed="true"><i class="fas fa-edit "></i></a></td>"'.
				'<td Class="btnLoc"><a href="/ListaSalasLocal/apagar/'.$ListaSalas->sal_codigo.'" class="btn btn-danger btnLoc " role="button" aria-pressed="true"><i class="fas fa-trash-alt"></i></a></td>"'
				.'</tr>';
            }  
			return Response($output);
       }

    }
}

Se eu adicionar mais um parâmetro para localizar o registro, como faria?

Como você quer que funcione? qual é o outro filtro e qual é o campo de filtro? é obrigatório?

O outro input é

<input name="data[search]" class="form-control"
  name="resp" id="resp" 
  type="text"placeholder="Responsável da Sala">

Nenhum dos campos é obrigatório, ou seja se não preencher irá trazer todos.
se por acaso o cara preencher o input sala e o input Responsável da Sala irá utilizar os 2 campos como filtro, então no filtro iria ser algo assim

$ListaSalas = DB::table('salas') 
    ->select('sal_codigo','sal_descricao')
    ->where('sal_descricao','LIKE','%'.$request->search."%")
    ->where('res_sala','LIKE','%'.$request->resp."%")
    ->where('emp_codigo', '=', session('empresa_id'))
    ->orderBy('sal_descricao')
    ->paginate(10);

Eu acabei de ver agora não tinha me atentando, você utiliza um filtro quando pressiona o teclado, faz a mesma coisa para o outro então, não é recomendado fazer assim, o correto seria com um botão de pesquisa … mas, ai você que resolve essa parte

1 curtida

minha duvida é como fazer esses 2 parâmetros chegar no controller.
pq eu até então só está chegando 1.

Eu entendi isso! mas, você entendeu que está fazendo errado?

Na prática:

$('#search').on('keyup',function(){
	  $value=$(this).val();
      $resp=$("#resp").val();
	  $.ajax({
	  type : 'get',
	  url : '{{URL::to('ListaSalasLocal')}}',
	  data:{'search':$value, 'resp': $resp},
	  success:function(data){
		$('tbody').html(data);
	  }
	  });
  })

só que esse código precisa ser duplicado para o outro input:

$('#resp').on('keyup',function(){
	  $value=$("#search").val();
      $resp=$(this).val();
	  $.ajax({
	  type : 'get',
	  url : '{{URL::to('ListaSalasLocal')}}',
	  data:{'search':$value, 'resp': $resp},
	  success:function(data){
		$('tbody').html(data);
	  }
	  });
  });

ou seja, errado, não tem padrão, causa manutenção adicionais … eu preferia clica no botão e mandar as duas informações ou uma pelo menos e executar a consulta!

Um outro problema é a inúmeras requisições que acaba acontecendo …

E esse é o dado enviado:

data:{'search':$value, 'resp': $resp},
1 curtida

entendi, vou analisar quando chegar em casa, obrigado pelas dicas!.