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?
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:
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!!!
En el desarrollo web la elección de un buen editor de texto enriquecido (WYSIWYG) es una decisión crucial que afecta dir[...]
En este tutorial utilizaremos la librería PHPMailer para enviar correo electrónico utilizando el servidor de GMail de Go[...]
Para poder conectar PHP con una base de datos de microsoft Access debemos seguir los siguientes pasos: 1. Crea una base[...]
Una Interface en PHP es como un molde que define la estructura y el comportamiento que deben tener las clases que las im[...]
En este post dejo el código fuente de un blog en PHP desarrollado siguiendo el patrón de diseño MVC (Modelo, Vista y Con[...]
Este post te enseña una manera que tengo de configurar Netbeans para crear y ejecutar un proyecto php utilizando el CMS[...]