How to pass an array by ajax to the controller?

0

I have an ajax that sends data from my selects to my controler and from there I do a check and query, so far everything is working perfectly. The problem is that the last select that I send is an array, since it's a select multiple, and I'm not able to pass it correctly. Someone to tip? I know it's easy, but I can not. Detail: I need this function (d), because I think it is important in the DataTable yajra.

View:

<div class="form-group">
     {{ Form::select('subunidade[]', $subunidades, null, array('class' => 'form-control js-example-basic-multiple', 'id' => 'subunidade', 'multiple' => 'multiple')) }}
</div>

Ajax:

<script type="text/javascript">

      var subunidades = new Array();

      $("select[name='subunidade[]']").each(function(){
         subunidades.push($(this).val());
      });

    var oTable = $('#example').DataTable({
           dom: "<'row'<'col-xs-12'<'col-xs-6'l><'col-xs-6'p>>r>"+
               "<'row'<'col-xs-12't>>"+
               "<'row'<'col-xs-12'<'col-xs-6'i><'col-xs-6'p>>>",
           processing: true,
           serverSide: true,
           ajax: {
               url: 'filterBusca',
               data: function (d) {
                   d.nome = $('input[name=nome]').val();
                   d.operador = $('select[name=operador]').val();
                   d.idade = $('input[name=idade]').val();
                   d.unidade = $('select[name=unidade]').val();
                   d.subunidade = $('select[name=subunidade').val();
               }
           },
           columns: [
               {data: 'id', name: 'id'},
               {data: 'matricula', name: 'matricula'},
               {data: 'nome', name: 'nome'},
               {data: 'cpf', name: 'cpf'},
               {data: 'idade', name: 'idade'},
               {data: 'unidade', name: 'unidade'},
               {data: 'sub_unidade', name: 'sub_unidade'},
           ]
       });


       $('#Filtrar').on('submit', function(e) {
           oTable.draw();
           e.preventDefault();
       });

  </script>

Controller:

if ($subunidade = $datatables->request->get('subunidade')) {
      $datatables->whereIn('sub_unidade.id', "$subunidade");
    
asked by anonymous 12.07.2018 / 19:19

1 answer

0

I was able to resolve by making the following changes:

I added [] no name getting subunit []:

<div class="form-group">
     {{ Form::select('subunidade[]', $subunidades, null, array('class' => 'form-control js-example-basic-multiple', 'id' => 'subunidade', 'multiple' => 'multiple')) }}
</div>

In ajax I captured not by the name of the select, but by the id:

d.subunidade = $("#subunidade").val();

And finally, to make the query in the controler I did the following:

//Recebi os dados do select
  $dataForm = $datatables->request->get('subunidade');
  //Cria a variavel para receber o array
  $arrayForm = null;
  //Um contador para carregar os dados do array na nova variavel $arrayForm
  for($i = 0; $i<count($dataForm); $i++){
    $arrayForm[] = array("$dataForm[$i]");
  }
  //Verifico
  if ($subunidade = $datatables->request->get('subunidade')) {
  //Faço a consulta usando o whereIn que é capaz de verificar a condição com array
      $datatables->whereIn('sub_unidade.id', $arrayForm);
  }

Simbora, let's have it together!

    
12.07.2018 / 21:10