Aprende Java Aprende Php Aprende C++ Aprende HTML 5 Aprende JavaScript Aprende JSON Aprende MySQL Aprende SQLServer Aprende Visual Basic 6 Aprende PostgreSQL Aprende SQLite Aprende Redis Aprende Kotlin Aprende XML Aprende Linux VSC Aprende Wordpress Aprende Laravel Aprende VueJS Aprende JQuery Aprende Bootstrap Aprende Netbeans Aprende Android
Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube Sigueme en TikTok Sigueme en Whatsapp
Home / Laravel / Paginación en SQL Server 2008 y Laravel

Paginación en SQL Server 2008 y Laravel

Por jc mouse domingo, septiembre 1, 2024

Hace un tiempo atras necesitaba mostrar mucha información en pantalla de una base de datos SQL Server 2008 en una aplicación Laravel, no podia tocar la estructura de las tablas, las mismas claro no estaban con el formato que utiliza Laravel y tampoco era una opción actualizar el SQL Server, no me lo permitian :(.

Se debe mencionar que a partir de la versión 12, SQL Server ya viene con funciones para la paginación y que Laravel obviamente tambien las tiene, pero no eran una opción para mi, pues bien, me las tuve que rebuscar info para hacer una paginación de mas de 100.000 registros y a continuación te muestro como.

¿Qué necesitamos?

  • Conocimientos básicos de Laravel
  • Conocimientos sobre SQL Server 2008
  • Un proyecto base de Laravel 11
  • Tener configurado el servidor con SQL Server, si no sabes como, este post te puede ayudar «Conectar SQL Server con PHP 8.x».

Manos a la obra.

Paso 1. Necesitamos crear una tabla en nuestra base de datos la cual llamaremos «STUDENTS«, lo puedes hacer directamente o con migration de Laravel, el que veas más conveniente, su estructura es la siguiente:

Le llenamos unos cuantos datos, 1000 son más que suficientes 🙂

Paso 2. En el proyecto Laravel creamos los siguientes archivos:

  • Un controllador llamado StudentController.php
  • En View, el archivo index.blade.php en la carpeta «students»

Paso 3. El Controlador

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class StudentController extends Controller
{

    public function index($first, $last)
    {
        $select = "SELECT id, name, email,
                ROW_NUMBER() OVER (ORDER BY id) AS rowNum
                from BDSCHOOL..students ";

        $sql = 'WITH Results AS ( ' . $select . ') SELECT * FROM Results WHERE RowNum BETWEEN '.$first.' AND '.$last ;
        $students = DB::connection('sqlsrv')->select($sql);
     
        return view('students.index', compact('students'));
    }
}

Explicación:

Utilizamos ROW_NUMBER() el cual devuelve el número secuencial de una fila dentro de una partición de un conjunto de resultados, comenzando en 1 para la primera fila de cada partición.

En el ejemplo se esta usando una sola tabla, pero claro, se puede usar con varias tablas relacionadas sin problemas.

A continuación filtramos solo los registros que nos interesan con el comando between y devolvemos este a la vista.

Paso 4. La vista

<!DOCTYPE html>
<html>
<head>
    <title>SQL Server 2008 Pagination - (https://www.jc-mouse.net/)</title>
    <meta name="csrf-token" content="{{ csrf_token() }}">
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css' rel='stylesheet'>    
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
    <style>  
    </style>
</head>

<body>    
    <div class="container">        
        <div class="row">        
            <div class="col-md-12 text-center">
                <h1>sqlserver 2008 Pagination</h1>
            </div>
            <div class="col-md-12">
                <table class="table table-striped">
                    <thead>
                      <tr>
                        <th scope="col">ID</th>
                        <th scope="col">NOMBRE COMPLETO</th>
                        <th scope="col">CORREO ELECTRONICO</th>                        
                      </tr>
                    </thead>
                    <tbody>
                        @foreach ( $students as $student )
                        <tr>
                            <th scope="row">{{ $student->id }}</th>
                            <td>{{ $student->name }}</td>
                            <td>{{ $student->email }}}</td>                        
                          </tr>                            
                        @endforeach
                    </tbody>
                  </table>
            </div>
        </div>
    </div>
</body>
</html>

Paso 5. La ruta

Route::get('/students/{first}/{last}', [StudentController::class, 'index']);

LLamamos en el navegador y tenemos

enjoy!!!

Tags

Artículos similares

Autenticación basada en API Keys en Laravel 12

La autenticación basada en API keys es un método para proteger el acceso a una API. Se utiliza una clave alfanumérica ún[...]

Blog MVC – Consultas Ajax a la base de datos [p5]

Quinta parte de la serie de tutoriales «Creación de un blog siguiendo el patrón MVC (Modelo, Vista y Controlador)«. En e[...]

The Polite Type: La fuente tipográfica políticamente correcta

«Las palabras que elegimos dan forma a nuestra realidad. La Fuente Educada (Polite Type) es una fuente de código abierto[...]

Distribución de escaños con el método D’Hondt caso práctico (Bolivia)

El sistema D’Hondt creado por el jurista belga Victor d’Hondt en 1878, es un método de promedio mayor para a[...]

Crea y usa Traits en Laravel

¿Qué es un Trait en Laravel? Los Trait son una forma que laravel tiene para reutilizar el código, son similares a las cl[...]

Crea un plugin WP con panel de administracion

En este post crearemos un plugin para el CMS WordPress el cual comprende el plugin en si, un panel de administración y e[...]