Como contar los registros en laravel recibidos por request

publicado por: Anonymous

Tengo un buscador el cual busca las automotoras presentes por ciudad y me muestra en una vista el resultado en una tabla. En esa vista muestro un mensaje indicando el numero de registros que se logró encontrar dependiendo de la búsqueda realizada.

Dejo un EJEMPLO SIMILAR de como debería mostrar el numero de resultados.

_x000D_

_x000D_

var RegionesYcomunas = {_x000D_
  "regiones": [{_x000D_
      "NombreRegion": "Area del Norte",_x000D_
       "comunas": ["El Rosal", "El Cañon","Las Olas"]_x000D_
  },_x000D_
  {_x000D_
      "NombreRegion": "Area Central",_x000D_
      "comunas": ["El Bosque", "Los Valles", "La pradera verde"]_x000D_
  },_x000D_
_x000D_
  {_x000D_
     "NombreRegion": "Area del Sur",_x000D_
     "comunas": ["El Rio Nevado", "La Antartida", "Los Iceberg Frios"]_x000D_
  }]_x000D_
}_x000D_
_x000D_
_x000D_
jQuery(document).ready(function () {_x000D_
_x000D_
  var iRegion = 0;_x000D_
  var htmlRegion = '<option value=" ">Seleccione una zona</option><option value=" " disabled="disabled">--</option>';_x000D_
  var htmlComunas = '<option value=" ">Seleccione una ciudad</option><option value=" " disabled="disabled">--</option>';_x000D_
_x000D_
  jQuery.each(RegionesYcomunas.regiones, function () {_x000D_
    htmlRegion = htmlRegion + '<option value="' + RegionesYcomunas.regiones[iRegion].NombreRegion + '">' + RegionesYcomunas.regiones[iRegion].NombreRegion + '</option>';_x000D_
                iRegion++;_x000D_
});_x000D_
_x000D_
            _x000D_
_x000D_
  jQuery('#areas').html(htmlRegion);_x000D_
  jQuery('#ciudades').html(htmlComunas);_x000D_
_x000D_
  jQuery('#areas').change(function () {_x000D_
      var iRegiones = 0;_x000D_
      var valorRegion = jQuery(this).val();_x000D_
      var htmlComuna = '<option value=" ">Seleccione una ciudad</option><option value=" " disabled="disabled">--</option>';_x000D_
      jQuery.each(RegionesYcomunas.regiones, function () {_x000D_
        if (RegionesYcomunas.regiones[iRegiones].NombreRegion == valorRegion){_x000D_
          var iComunas = 0;_x000D_
      jQuery.each(RegionesYcomunas.regiones[iRegiones].comunas, function(){_x000D_
          htmlComuna = htmlComuna + '<option value="' + RegionesYcomunas.regiones[iRegiones].comunas[iComunas] + '">' + RegionesYcomunas.regiones[iRegiones].comunas[iComunas] + '</option>';_x000D_
        iComunas++;_x000D_
      });_x000D_
    }_x000D_
    iRegiones++;_x000D_
  });_x000D_
 _x000D_
  jQuery('#ciudades').html(htmlComuna);_x000D_
});_x000D_
_x000D_
_x000D_
jQuery('#ciudades').change(function () {_x000D_
  if(jQuery(this).val() == ' '){_x000D_
                    _x000D_
    $('#areas').focus();_x000D_
    alert("Seleccione una zona primero.");_x000D_
    return false;_x000D_
  }_x000D_
});_x000D_
_x000D_
  jQuery('#areas').change(function () {_x000D_
    if($('#areas').val() == ' '){_x000D_
      _x000D_
      $('#col_1').show();_x000D_
      $('#col_2').show();_x000D_
      $('#col_3').show();_x000D_
      $('#col_4').show();_x000D_
      $('#col_5').show();_x000D_
      $('#col_6').show();  _x000D_
      $('#col_7').hide();_x000D_
      document.getElementById('result').style.display = "none";_x000D_
      document.getElementById('result_2').style.display = "none";_x000D_
      document.getElementById('result_3').style.display = "none";_x000D_
      document.getElementById('hr').style.width = "1450%";_x000D_
      document.getElementById('nothing').style.display = 'none';_x000D_
    }_x000D_
  });_x000D_
_x000D_
_x000D_
  $(document).on('click', '.detalle', function(){_x000D_
    if($('#areas').val() == ' '){_x000D_
        $('#areas').focus();_x000D_
        alert('Debe seleccionar una zona y luego una ciudad.');_x000D_
        return false;_x000D_
    }_x000D_
    _x000D_
    if($('#areas').val() == 'Area del Norte' && $('#ciudades').val() == 'El Rosal'){        _x000D_
        _x000D_
      $('#col_2').show();_x000D_
      document.getElementById('hr').style.width = "1280%";_x000D_
      $('#col_3').hide();_x000D_
      $('#col_4').show();_x000D_
      $('#col_5').hide();_x000D_
      $('#col_1').show();_x000D_
      $('#col_6').hide();_x000D_
      document.getElementById('result').style.display = "inline-block";_x000D_
      document.getElementById('result_2').style.display = "none";_x000D_
      document.getElementById('result_3').style.display = "none";       document.getElementById('nothing').style.display = 'none';_x000D_
      _x000D_
    }else if($('#areas').val() == 'Area Central' && $('#ciudades').val() == 'El Bosque'){_x000D_
      _x000D_
      $('#col_1').hide();_x000D_
      $('#col_5').show();_x000D_
      $('#col_3').show();_x000D_
      $('#col_4').hide();_x000D_
      $('#col_2').hide();_x000D_
      $('#col_6').hide();_x000D_
      document.getElementById('result_2').style.display = 'inline-block';_x000D_
      document.getElementById('result').style.display = "none";_x000D_
      document.getElementById('result_3').style.display = "none";_x000D_
      document.getElementById('hr').style.width = "1150%";_x000D_
      document.getElementById('nothing').style.display = 'none';_x000D_
      _x000D_
    }else if($('#areas').val() == 'Area del Sur' && $('#ciudades').val() == 'La Antartida'){_x000D_
      _x000D_
      $('#col_2').hide();_x000D_
      $('#col_4').hide();_x000D_
      $('#col_5').hide();_x000D_
      $('#col_1').hide();_x000D_
      $('#col_3').hide();_x000D_
      $('#col_6').show();_x000D_
      document.getElementById('result_3').style.display = 'inline-block';_x000D_
      document.getElementById('result').style.display = "none";_x000D_
      document.getElementById('result_2').style.display = "none";_x000D_
      document.getElementById('hr').style.width = "1200%";_x000D_
      document.getElementById('nothing').style.display = 'none';_x000D_
      _x000D_
    }else if($('#areas').val() != '' && $('#ciudades').val() != ''){_x000D_
      $('#col_1').hide();_x000D_
      $('#col_2').hide();_x000D_
      $('#col_3').hide();_x000D_
      $('#col_4').hide();_x000D_
      $('#col_5').hide();_x000D_
      $('#col_6').hide();_x000D_
      document.getElementById('nothing').style.display = "inline-block";_x000D_
      document.getElementById('result_3').style.display = 'none';_x000D_
      document.getElementById('result').style.display = "none";_x000D_
      document.getElementById('result_2').style.display = "none";_x000D_
       document.getElementById('hr').style.width = "1000%";_x000D_
   }_x000D_
  });_x000D_
});

_x000D_

body{_x000D_
  font-family: 'Segoe UI';_x000D_
  user-select: none;_x000D_
  font-size: 12pt;_x000D_
}_x000D_
table{_x000D_
  border-width: 2px;_x000D_
  border-style: solid;_x000D_
  border-color: black;_x000D_
  border-radius: 5px;_x000D_
}_x000D_
.hide{_x000D_
  display: none;_x000D_
}_x000D_
hr{_x000D_
  width: 1450%;_x000D_
  border-color: black;_x000D_
}_x000D_
select{_x000D_
  border-style: solid;_x000D_
  border-width: 2px;_x000D_
  border-color: black;_x000D_
  border-radius: 5px;_x000D_
  font-size: 12pt;_x000D_
  width: 38%;_x000D_
  outline-style: none;_x000D_
}_x000D_
select:focus{_x000D_
  border-color: red;_x000D_
}_x000D_
input{_x000D_
  border-radius: 5px;_x000D_
  outline-style: none;_x000D_
  border-style: solid;_x000D_
  border-width: 2px;_x000D_
  border-color: black;_x000D_
  width: 20%;_x000D_
  height: 8mm;_x000D_
  font-size: 12pt;_x000D_
  transition-duration: 0.3s;_x000D_
  -moz-transition-duration: 0.3s;_x000D_
}_x000D_
input:hover{_x000D_
  background-color: rgba(0,0,0,0.8);_x000D_
  color: white;_x000D_
  transition-duration: 0.2s;_x000D_
  -moz-transition-duration: 0.2s;_x000D_
}_x000D_
input:active{_x000D_
  transform: scale(0.9);_x000D_
  transition-duration: 0.1s;_x000D_
  _x000D_
  -moz-transform: scale(0.9);_x000D_
  -moz-transition-duration: 0.1s;_x000D_
}

_x000D_

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js"></script>_x000D_
_x000D_
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-confirm/3.3.0/jquery-confirm.min.js"></script>_x000D_
_x000D_
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>_x000D_
_x000D_
<body oncontextmenu="return false;">_x000D_
  <br>_x000D_
_x000D_
   <select id="areas"></select>&nbsp;&nbsp;&nbsp;&nbsp;_x000D_
   <select id="ciudades"></select>_x000D_
   <br><br>_x000D_
   <input type="submit" id="submit" value="BUSCAR" class="detalle">_x000D_
_x000D_
  <br><br>_x000D_
  <label class="hide" id="nothing">Sin resultados para su búsqueda.</label>_x000D_
  <label class="hide" id="result">Resultados encontrados para su búsqueda: 3.</label>_x000D_
  <label class="hide" id="result_2">Resultados encontrados para su búsqueda: 2.</label>_x000D_
  <label class="hide" id="result_3">Resultados encontrados para su búsqueda: 1.</label>_x000D_
  <br><br>_x000D_
  _x000D_
  <table>_x000D_
    <thead>_x000D_
      <tr>_x000D_
        <th>ID</th>_x000D_
        <th>COMPAÑIA</th>_x000D_
        <th>CIUDAD</th>_x000D_
      </tr>_x000D_
    </thead>_x000D_
    <tbody>_x000D_
      <tr>_x000D_
        <td><hr id="hr"></td>_x000D_
      </tr>_x000D_
      _x000D_
      <tr id="col_1"> _x000D_
        <td>1</td>_x000D_
        <td>&nbsp;MERCEDEZ-BENZ&nbsp;</td>_x000D_
        <td>&nbsp;El Rosal&nbsp;</td>_x000D_
      </tr>_x000D_
     _x000D_
      <tr id="col_2"> _x000D_
        <td>2</td>_x000D_
        <td>&nbsp;CHEVROLET&nbsp;</td>_x000D_
        <td>&nbsp;El Rosal&nbsp;</td>_x000D_
      </tr>_x000D_
      _x000D_
      <tr id="col_3"> _x000D_
        <td>3</td>_x000D_
        <td>&nbsp;CHEVROLET&nbsp;</td>_x000D_
        <td>&nbsp;El Bosque&nbsp;</td>_x000D_
      </tr>_x000D_
      _x000D_
      <tr id="col_4">_x000D_
        <td>4</td>_x000D_
        <td>&nbsp;BMW&nbsp;</td>_x000D_
        <td>&nbsp;El Rosal&nbsp;</td>_x000D_
      </tr>_x000D_
      _x000D_
      <tr id="col_5">_x000D_
        <td>5</td>_x000D_
        <td>&nbsp;Hyundai&nbsp;</td>_x000D_
        <td>&nbsp;El Bosque&nbsp;</td>_x000D_
      </tr>_x000D_
      _x000D_
      <tr id="col_6">_x000D_
        <td>6</td>_x000D_
        <td>&nbsp;Audi&nbsp;</td>_x000D_
        <td>&nbsp;La Antartida&nbsp;</td>_x000D_
      </tr>_x000D_
      _x000D_
    </tbody>_x000D_
  </table>_x000D_
_x000D_
</body>

_x000D_

_x000D_

_x000D_

Lo que intento es mostrar del mismo modo que en el EJEMPLO el número de resultados de elementos, pero en LARAVEL con PHP. El cual tengo una vista con 2 <select> y un botón que me redirecciona a una vista diferente la cual me muestra los resultados.

Tengo de este modo el código del controlador:

public function BuscarPorCiudad(Request $request){

  $motors = CompaniaNew::all();
  $recibo = $request->ciudades;
  $contar = count([$request->all()]);

  try {
    foreach($motors as $motors){
      if ($motors->city == $request->ciudades){

        Session::flash('info', 'Se encontraron'.' '.$contar.' '.'registros en relación a su búsqueda.');
        return view('compañias-buscar')->with('compania', $motors)->with('recibo',$recibo);

      }
    }   
  } catch (IlluminateDatabaseQueryException $e) {
     // ESTA VEZ SE DEJARÁ EL CATCH VACÍO PORQUE NO MUESTRA EL ERROR 
     // QUE DEBE MOSTRAR PARA LOS CASOS QUE LA BÚSQUEDA NO COINCIDA
    }
    Session::flash('error', 'Lo sentimos. Su búsqueda no coincide con nuestros registros');
    return Redirect()->back();
}

El cual con Session::flash(); muestro el mensaje y es en donde quiero mostrar el numero de resultados, pero siempre me muestra 1. Cuando lo que busco es que cuente las filas mostradas según la búsqueda y ese sea el numero a mostrar.

Si el resultado contiene 2 filas en la tabla me deberia decir, se han encontrado 2 resultados para su búsqueda, por ejemplo.

Si son 3, debe mostrar un 3, si son más o menos el numero debe ir variando. Para ello use la variable $contar. Pero no me funciona.

solución

Respondo a mi pregunta logré encontrar la solución a mi problema.

De este modo logro contar las filas segun la busqueda realizada.

public function BuscarPorCiudad(Request $request){

  $motors = CompaniaNew::all();
  $recibo = $request->ciudades;
  $contar = DB::table('compania')->where('compania.city', $recibo)
  ->select(DB::raw('count(*) as filas'))
  ->first();

  try {
    foreach($motors as $motors){
      if ($motors->city == $request->ciudades){

        Session::flash('info', 'Se encontraron'.' '.$contar->filas.' '.'registros en relación a su búsqueda.');
        return view('compañias-buscar')->with('compania', $motors)->with('recibo',$recibo);

      }
    }   
  } catch (IlluminateDatabaseQueryException $e) {
  // ESTA VEZ SE DEJARÁ EL CATCH VACÍO PORQUE NO MUESTRA EL ERROR 
  // QUE DEBE MOSTRAR PARA LOS CASOS QUE LA BÚSQUEDA NO COINCIDA
}
    Session::flash('error', 'Lo sentimos. Su búsqueda no coincide con nuestros registros');
    return Redirect()->back();
}

Lo que tenia mal en mi pregunta era la siguiente, linea:

$contar = count([$request->all()]);

El cual al comprobar que era lo que me traía el request->all() era el valor del select escogido, y al realizar lo siguiente:

$contar = DB::table('compania')->where('compania.city', $recibo)
   ->select(DB::raw('count(*) as filas'))
   ->first();

Se lograba especificar de mejor manera lo que se quiere contar. Esto ultimo lo obtuve de la siguiente fuente:

Fuente: (enlace)

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *