TransWikia.com

actualizar una datatable en tiempo real laravel

Stack Overflow en español Asked by Ramon Albares on December 23, 2021

helpme

Nombre

   <th scope="col">Nombre proyecto</th>
 <th scope="col">Aprobado </th>
  <th scope="col">No Aprobado</th>
   <th scope="col">Abstencion</th>
</tr>

@foreach ($mostrarusers as $mostraruser)
<tr>


  <td>{{$mostraruser->usuario}}</td>

    <td>{{$mostraruser->proyecto}}</td>
    <td>{{$mostraruser->si}}</td>
    <td>{{$mostraruser->no}}</td>
     <td>{{$mostraruser->voto_en_blanco}}</td>

</tr>
  @endforeach

la idea es que se muestre entiempo real la tabla

la funcion del controller es esta

$mostrarusers = DB::table('votos')
->join('users','users.id','=','votos.user_id')

->join('nombre_votos','nombre_votos.id','=','votos.id_nombre_votos')
->select('users.name as usuario', 'nombre_votos.nombre as 
proyecto','si','no','voto_en_blanco')
->whereDate('votos.created_at', Carbon::today())

->get();

One Answer

Corrígeme si me equivoco (ya que no enviaste muchos datos para entenderte mejor), pero yo supongo que tu tienes algo así en tu controlador:

function controladorVista()
{
 $mostrarusers = DB::table('votos')
  ->join('users','users.id','=','votos.user_id')
  ->join('nombre_votos','nombre_votos.id','=','votos.id_nombre_votos')
  ->select('users.name as usuario', 'nombre_votos.nombre as 
   proyecto','si','no','voto_en_blanco')
  ->whereDate('votos.created_at', Carbon::today())
  ->get()
  return view('index', compact('mostrarusers'));
}

Si es así, lamento decirte que tu lista solo se actualizará cuando hagas refresh(recargues la página). Ahora partiendo de eso las opciones que tienes para actualizar tu página sin necesidad de recargar esta serian:

1 - Hacer una petición vía ajax a una ruta/endpoint de tu servidor en laravel, esto te traerá tu lista y podrás actualizar tu tabla, para ello tendrías que adicionarle la función setInterval de js que la ejecute cada cierto tiempo (tal vez cada 3 minutos).

En tu controller:

function getMostrarUsers()
    {
        $mostrarusers = DB::table('votos')
          ->join('users','users.id','=','votos.user_id')
          ->join('nombre_votos','nombre_votos.id','=','votos.id_nombre_votos')
          ->select('users.name as usuario', 'nombre_votos.nombre as 
           proyecto','si','no','voto_en_blanco')
          ->whereDate('votos.created_at', Carbon::today())
          ->get();
        return response()->json($mostrarusers, 200);
    }

En tu archivo de rutas(routes/web.php) por defecto

Route::get('/mostrar-users', 'TuControlador@getMostrarUsers')->name('rest.getMostrarUsers');

(En tu view/vista) Entonces en el parte de tus <scripts> o un archivo js externo, sería más o menos así (Usando JQuery):

function cargarTabla(){
        $.ajax({
            url     : '{{ route('rest.getMostrarUsers')}}',
            method  : 'GET',
            success : function(r){
                let lista = r;
                let htmlCode = ``;
                $.each(lista, function(index, item){
                    htmlCode+=`<tr>
                                <td>${item.nombreProyecto}</td>
                                <td>${totalDeSi}</td>
                                <td>${totalDeNo}</td>
                                <td>${totalVotoBlanco}</td>
                            </tr>`;
                });
                $('#id-mi-tabla tbody').html(htmlCode);
            }
        });
    }

En el mismo documento usando el document ready, cargarías esta función cada cierto tiempo así:

$( document ).ready(function() {
        setInterval(cargarTabla, 180000);//Cada 3 minutos (180 mil milisegundos)
    });

2 - Usar websockets, que sería lo óptimo, con esto podrías configurar que cada vez que haces un insert/update/delete de algo relacionado a tu lista(como un voto), disparé un evento en laravel que se encargue de actualizar tu tabla a todos los clientes que estén suscritos a este. esto si sería en tiempo real.

Answered by Jorge Luis Bustamante Jara on December 23, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP