martes, 30 de enero de 2018

Laravel DataTables 4

Los ejemplos básicos de Laravel DataTables (incluyendo los míos) solo tratan con tablas individuales. Es más raro encontrar qué hacer con las columnas de otras tablas tomadas por relaciones, algo la mar de normal en bases de datos.

No hay mucha complicación aquí. El nombre utilizado es el mismo que el nombre de la columna en sí, tanto en Laravel como en Javascript. De modo que si utilizamos el método Query Builder:

$datos = DB::table('tabla')

    ->select([

        'tabla1.id',

        'tabla1.nombre',

        'tabla2.origen'

    ])

    ->join('tabla2', 'tabla1.origen_id', 'tabla2.id');


Podemos mostrar las columnas: 'tabla1.id', 'tabla1.nombre' y 'tabla2.origen'.
Nada nos impide emplear alias.

$datos = DB::table('tabla')

    ->select([

        'tabla1.id AS id',

        'tabla1.nombre AS nombre',

        'tabla2.origen AS 'origen'

    ])

    ->join('tabla2', 'tabla1.origen_id', 'tabla2.id');


Sin embargo esto tiene sus limitaciones a la hora de aplicar filtros (sobre los que hablaré en el próximo capítulo). Para esto habrá que engrosar un poco la información en Javascript. El resultado sería algo así:

    $(function() {

        $('#list-table').DataTable({

            processing: true,

            serverSide: true,

            columns: [

                { data: 'id', name: 'tabla1.id' },

                { data: 'nombre', name: 'tabla1.nombre' },

                { data: 'origen', name: 'tabla2.origen' },

            ],

            ajax: 'http://sitio.net/tabla/data'

            }

        });

    });


En cada columna, el data es lo que se muestra en la tabla resultante, y el name es lo que utilizará para las búsquedas o filtros. O sea, lo que meterá en sus WHEREs. No es necesario indicar el nombre completo en columnas de la tabla principal (la del FROM), pero nunca está de más.
Por supuesto, esta distinción es importante si dos tablas tienen columnas con el mismo nombre.

Pos eso. En el próximo capítulo empiezo con los filtros y búsquedas.

No hay comentarios:

Publicar un comentario