Laravel

INNER JOIN usando Yajra Datatables en Laravel

INNER JOIN usando Yajra Datatables en Laravel. En Laravel, cuando utilizas el paquete Yajra Datatables para manejar tablas dinámicas, puedes realizar un INNER JOIN entre tablas directamente en la consulta que alimenta la DataTable. A continuación te explico cómo hacerlo en español:

INNER JOIN usando Yajra Datatables en Laravel

A continuación, veremos 4 pasos para implementar INNER JOIN en Laravel con el paquete Yajra Datatables.

Paso 1: Instalar Yajra Datatables

Si no lo has hecho, instala el paquete Yajra Datatables en tu proyecto Laravel:

composer require yajra/laravel-datatables-oracle

Luego, publica los archivos de configuración:

php artisan vendor:publish --provider="Yajra\DataTables\DataTablesServiceProvider"

Paso 2: Configurar el Controlador

Supongamos que tienes dos tablas: users y posts, y quieres hacer un INNER JOIN para obtener los datos de ambas tablas.

  1. En tu controlador, define la consulta con el INNER JOIN.
  2. Usa el método datatables() de Yajra para convertir la consulta en una DataTable.

Ejemplo de uso:

<?php

use App\Models\User;
use DataTables;


class UserController extends Controller
{
    public function index()
    {
        return view('users.index');
    }


    public function getUsers()
    {
        // Consulta con INNER JOIN
        $users = User::join('posts', 'users.id', '=', 'posts.user_id')
            ->select([
                'users.id',
                'users.name',
                'users.email',
                'posts.title as post_title',
                'posts.created_at as post_created_at'
            ]);


        return DataTables::of($users)->make(true);
    }
}

Paso 3: Configurar la Vista

En tu vista (por ejemplo, resources/views/users/index.blade.php), incluye la DataTable y configura las columnas.

<!DOCTYPE html>
<html>
<head>
    <title>Usuarios y Posts</title>
    <link rel="stylesheet" href="https://cdn.datatables.net/1.10.25/css/jquery.dataTables.min.css">
</head>
<body>
    <table id="users-table" class="display" style="width:100%">
        <thead>
            <tr>
                <th>ID</th>
                <th>Nombre</th>
                <th>Email</th>
                <th>Título del Post</th>
                <th>Fecha del Post</th>
            </tr>
        </thead>
    </table>


    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script src="https://cdn.datatables.net/1.10.25/js/jquery.dataTables.min.js"></script>
    <script>
        $(document).ready(function() {
            $('#users-table').DataTable({
                processing: true,
                serverSide: true,
                ajax: '{{ route("users.data") }}',
                columns: [
                    { data: 'id', name: 'users.id' },
                    { data: 'name', name: 'users.name' },
                    { data: 'email', name: 'users.email' },
                    { data: 'post_title', name: 'posts.title' },
                    { data: 'post_created_at', name: 'posts.created_at' }
                ]
            });
        });
    </script>
</body>
</html>

Paso 4: Configurar las Rutas

En tu archivo routes/web.php, define las rutas para el controlador:

use App\Http\Controllers\UserController;


Route::get('/users', [UserController::class, 'index'])->name('users.index');
Route::get('/users/data', [UserController::class, 'getUsers'])->name('users.data');

Explicación de integracion de Inner Join en Laravel:

  1. Consulta con INNER JOIN: En el controlador, usas join() para unir las tablas users y posts mediante la clave user_id.
  2. DataTable: Conviertes la consulta en una DataTable usando DataTables::of().
  3. Vista: Configuras la tabla HTML y usas JavaScript para inicializar DataTables.
  4. Rutas: Defines las rutas para acceder a la vista y obtener los datos.

Resultado en el navegador:

Al cargar la página o proyecto, verás una tabla dinámica con los datos de los usuarios y sus posts, obtenidos mediante un INNER JOIN.

Segundo Ejemplo: Inner Join usando 2 tablas (Usuarios y Post)

Para unir 2 tablas en Yajra DataTables dentro de un proyecto de Laravel, puedes usar relaciones Eloquent o los métodos de Query Builder. A continuación un ejemplo de cómo se puede utilizar el Query Builder para unirse a las tablas y mostrar los datos utilizando Yajra DataTables.

Vamos a suponer que tenemos dos Tablas, usersy posts, dónde poststiene una clave foránea user_idreferencias users.id, puede unirse a estas tablas y seleccionar las columnas que necesita para mostrar en su DataTable.

He aquí un ejemplo de cómo podrías configurar esto en un método de controlador:

<?php

use App\Models\User;
use Yajra\DataTables\DataTables;


public function getUsersWithPosts()
{
    // Usamos query builder para unir tablas
    $query = User::query()
        ->join('posts', 'users.id', '=', 'posts.user_id')
        ->select([
            'users.id',
            'users.name',
            'posts.title',
            'posts.body'
        ]);


    return DataTables::of($query)
        ->make(true);
}

Espero que esta explicación ayude a despejar dudas sobre la implementación de unión de tablas en Laravel.

Nestor Tapia

Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.
Botón volver arriba
Esta web utiliza cookies propias para su correcto funcionamiento. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad