PHPackages                             holacliente/laravel-datatables - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. holacliente/laravel-datatables

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

holacliente/laravel-datatables
==============================

Datatables that supports pagination and recursive searching in relations

2.4.5(2mo ago)0339MITPHPPHP ^7.1

Since Feb 16Pushed 2mo agoCompare

[ Source](https://github.com/holacliente/laravel-datatables)[ Packagist](https://packagist.org/packages/holacliente/laravel-datatables)[ Docs](https://github.com/holacliente/laravel-datatables)[ RSS](/packages/holacliente-laravel-datatables/feed)WikiDiscussions master Synced today

READMEChangelog (6)DependenciesVersions (9)Used By (0)

Holacliente Laravel DataTables
==============================

[](#holacliente-laravel-datatables)

[![Total Downloads](https://camo.githubusercontent.com/7af6335123a03f48cc76e6fe76abfef50e7ea9d7b9798ac64b7edb00f4c07cca/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f686f6c61636c69656e74652f6c61726176656c2d646174617461626c65732e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/holacliente/laravel-datatables)[![License](https://camo.githubusercontent.com/0342a57ce7f39aceccbad6f4ef3eff1e4d7efa6a383d7c807a549f707c922601/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f686f6c61636c69656e74652f6c61726176656c2d646174617461626c65732e7376673f7374796c653d666c61742d737175617265)](https://github.com/holacliente/laravel-datatables/blob/master/LICENSE.md)

Un paquete Laravel potente para procesamiento server-side de DataTables con soporte avanzado para búsqueda, filtrado, paginación y relaciones.

---

Tabla de Contenidos
-------------------

[](#tabla-de-contenidos)

- [Características](#caracter%C3%ADsticas)
- [Requisitos del Sistema](#requisitos-del-sistema)
- [Instalación](#instalaci%C3%B3n)
- [Uso Básico](#uso-b%C3%A1sico)
- [Changelog](#changelog)
- [Mejoras Recientes](#mejoras-recientes)

---

Características
---------------

[](#características)

✨ **Procesamiento Server-Side**: Manejo eficiente de grandes conjuntos de datos
🔍 **Búsqueda Avanzada**: Búsqueda recursiva en relaciones usando notación de puntos
📊 **Paginación Inteligente**: Soporte automático de paginación y límites
🔗 **Relaciones**: Búsqueda y ordenamiento en modelos relacionados
🛡️ **Seguridad**: Cifrado integrado para campos sensibles
📝 **Soft Deletes**: Soporte para registros eliminados suavemente
⚡ **Eager Loading**: Prevención de consultas N+1
🎯 **Multi-Tabla**: Soporte para múltiples DataTables en una página
🔄 **Filtros Avanzados**: Donde, whereIn, whereYear, whereHas y más
📦 **Flexible**: Funciona con Eloquent, SQL crudo y colecciones

---

Requisitos del Sistema
----------------------

[](#requisitos-del-sistema)

- **PHP**: 7.1+ (Optimizado para 7.4+)
- **Laravel**: 5.6+
- **Composer**: ^1.9 o ^2.0

### Compatibilidad de Versiones

[](#compatibilidad-de-versiones)

Versión PHPEstadoNotas7.1 - 7.3✅ SoportadoVersión mínima requerida**7.4+**✅ **Optimizado****Recomendado** - Máxima compatibilidad8.0+✅ SoportadoCompatible con PHP 8.x8.1+✅ SoportadoCompatible con PHP 8.1+---

Instalación
-----------

[](#instalación)

```
composer require holacliente/laravel-datatables
```

El paquete se registrará automáticamente en Laravel 5.5+.

---

Uso Básico
----------

[](#uso-básico)

### Ejemplo Simple

[](#ejemplo-simple)

```
use ACFBentveld\DataTables\DataTables;

DataTables::model(new User())
    ->searchable('name', 'email')
    ->get();
```

### Búsqueda en Relaciones

[](#búsqueda-en-relaciones)

```
DataTables::model(new User())
    ->searchable('name', 'email', 'role.name', 'department.title')
    ->with('role', 'department')
    ->get();
```

### Consultas SQL Directas

[](#consultas-sql-directas)

Desde v2.0.25 (25/02/2021), ahora puedes ejecutar consultas SQL directas:

```
DataTables::query("SELECT * FROM users WHERE status = 'active'")->get();
```

O con Query Builder:

```
DataTables::query(DB::table('users')->where('status', 'active'))->get();
```

### Filtros Avanzados

[](#filtros-avanzados)

```
DataTables::model(new User())
    ->where('status', '=', 'active')
    ->whereIn('role_id', [1, 2, 3])
    ->whereYear('created_at', 2024)
    ->searchable('name', 'email')
    ->with('role')
    ->exclude('password', 'remember_token')
    ->get();
```

### Soft Deletes

[](#soft-deletes)

```
// Incluir registros eliminados
DataTables::model(new User())
    ->withTrashed()
    ->get();

// Mostrar solo registros eliminados
DataTables::model(new User())
    ->onlyTrashed()
    ->get();
```

### Encriptación de Campos Sensibles

[](#encriptación-de-campos-sensibles)

```
DataTables::model(new User())
    ->encrypt('ssn', 'api_key', 'password')
    ->get();
```

### Control de Columnas

[](#control-de-columnas)

```
DataTables::model(new User())
    ->select('id', 'name', 'email', 'role_id')  // Solo estas columnas
    ->exclude('password', 'remember_token')      // O excluir estas
    ->get();
```

### Resultados Distintos

[](#resultados-distintos)

```
DataTables::model(new User())
    ->distinct('category_id')
    ->get();
```

### Múltiples DataTables en una Página

[](#múltiples-datatables-en-una-página)

```
DataTables::model(new User())
    ->table('users_datatable')
    ->get();

DataTables::model(new Post())
    ->table('posts_datatable')
    ->get();
```

---

Changelog
---------

[](#changelog)

### v2.4.5 (Actual)

[](#v245-actual)

**🚀 Endurecimiento del modo cursor + select()**

- ⚡ **Se omiten los `COUNT(*)`** (total y filtrado) en páginas siguientes cuando `cursorPaginate()` está activo y se envía `?cursor=...`. Reduce de 3 a 1 query pesada por request a partir de la segunda página.
- 🔧 **Cursor robusto**: ya no fuerza `(int)` — soporta UUIDs, timestamps y hashes. La dirección (``) se infiere del `ORDER BY` solicitado.
- 🐛 **Search aplicada al query con cursor** (antes solo afectaba al COUNT filtrado).
- 🛡️ **Guard para `select([])` vacío**: si tras `exclude()`/`select()` no quedan columnas, se descarta la cláusula en vez de generar SQL inválido.
- ✅ 100% retro-compatible.

### v2.4.0

[](#v240)

**🚀 Optimizaciones de Rendimiento: Paginación por Cursor (Keyset)**

Esta versión ataca los cuellos de botella en consultas con `OFFSET` profundo y ordenamiento/paginación en memoria sobre tablas grandes.

- ✨ **Nuevo método `cursorPaginate(string $column = 'id')`** (opt-in)
    - Reemplaza `LIMIT n OFFSET m` por `WHERE column > :cursor LIMIT n`
    - Elimina el costo lineal de `OFFSET` alto en tablas grandes
    - La respuesta JSON incluye `nextCursor` cuando está activo
- ⚡ **`sortModel()` ahora empuja `ORDER BY` + `LIMIT` al SQL** cuando no hay búsqueda activa (antes traia toda la tabla a PHP y aplicaba `slice()`)
- 🛡️ **`start` y `length` se castean a `int`** con defaults seguros (`0` y `10`)
- ✅ 100% retro-compatible — nada cambia para código existente

**Ejemplo de uso del cursor pagination:**

```
DataTables::query(
    Result::query()
        ->join('reports', 'results.report_id', '=', 'reports.id')
        ->where('reports.campaign_id', $campaignId)
)
->cursorPaginate('results.id')
->get();
```

El frontend debe enviar `?cursor=` en cada request siguiente.

> **Nota:** La paginación por cursor no permite saltar a una página arbitraria por número — solo navegación secuencial (siguiente). Ideal para tablas grandes donde el usuario hace scroll/next-page lineal o procesos de exportación.

### v2.3.0

[](#v230)

**🆕 Mejoras de Compatibilidad con PHP 7.4+**

- ✅ Reemplazado `implode()` con `join()` para máxima compatibilidad
    - Línea 312: Headers processing
    - Línea 387: ORDER BY clause (query builder)
    - Línea 766: ORDER BY clause (raw queries)
- ✅ Optimizado para PHP 7.4, 8.0, 8.1, 8.2 y 8.3+
- ✅ Código más legible y consistente con estándares modernos
- ✅ Sin cambios de funcionalidad - totalmente retro-compatible

**Razones del cambio:**

- `join()` es alias de `implode()` desde PHP 5.3
- Orden de parámetros más consistente y predecible
- Mejor claridad y legibilidad del código
- Recomendado en la documentación oficial de PHP 7.4+

### v2.0.26

[](#v2026)

- ✨ Agregado ordenamiento por múltiples columnas
- 🐛 Mejoras en estabilidad general

### v2.0.25 (2024-06-04)

[](#v2025-2024-06-04)

- ⚡ Optimizadas funciones execute para mejor paginación en modelos

### v2.0.24 (2021-02-25)

[](#v2024-2021-02-25)

- ✨ Nueva función `query()` para ejecutar consultas SQL directas
- 🎯 Soporte para Query Builder de Laravel

### v2.0.17

[](#v2017)

- 🗑️ Eliminado sistema de caché para mejor rendimiento
- ⚡ Optimizaciones generales de rendimiento

### v2.0.13

[](#v2013)

- ✨ Soporte para múltiples DataTables en una página

### v2.0.0

[](#v200)

- 🔗 Soporte para búsqueda en relaciones
- 📊 Ordenamiento en relaciones
- 🔍 Búsqueda recursiva con notación de puntos

### v1.0.x

[](#v10x)

- ✨ Fork de ACFBentveld\\DataTables
- 📚 Proyecto original guardado y mejorado
- 🚀 Mejoras en paginación server-side (2019)

---

Mejoras Recientes
-----------------

[](#mejoras-recientes)

### 🔄 Migración de `implode()` a `join()` (v2.2.0)

[](#-migración-de-implode-a-join-v220)

**Problema identificado**: `implode()` está siendo deprecado en favor de `join()` en versiones recientes de PHP.

**Solución implementada**:

- Se reemplazaron todas las ocurrencias de `implode()` con `join()`
- Mantiene **100% de compatibilidad** con versiones anteriores de PHP
- Optimiza la compatibilidad con **PHP 7.4+**
- No afecta el comportamiento del código

**Archivos modificados**:

- `src/DataTables.php` (3 cambios)

**Ejemplo del cambio**:

```
// Antes (PHP 7.4+ deprecado)
$set = implode(',', $value);

// Después (Compatible con todas las versiones)
$set = join(',', $value);
```

---

Contribución
------------

[](#contribución)

Reporta problemas en: [GitHub Issues](https://github.com/holacliente/laravel-datatables/issues)

Lee [CONTRIBUTING.md](./CONTRIBUTING.md) para más información sobre cómo contribuir al proyecto.

---

Licencia
--------

[](#licencia)

MIT License - Ver [LICENSE.md](./LICENSE.md)

---

Autor Original
--------------

[](#autor-original)

- **Proyecto Original**: ACFBentveld\\DataTables
- **Mantenedor Actual**: Holacliente

---

Reconocimientos
---------------

[](#reconocimientos)

Este paquete es un fork mejorado del proyecto original ACFBentveld\\DataTables, con mejoras continuas en compatibilidad, rendimiento y funcionalidad.

###  Health Score

42

—

FairBetter than 88% of packages

Maintenance86

Actively maintained with recent releases

Popularity13

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity50

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 84.6% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~65 days

Recently: every ~79 days

Total

6

Last Release

74d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/fcea8faabc1dbfb95e36681a4304009634473223903c7e2246a1844f202f8fe5?d=identicon)[holacliente](/maintainers/holacliente)

---

Top Contributors

[![lmacayo](https://avatars.githubusercontent.com/u/217669830?v=4)](https://github.com/lmacayo "lmacayo (11 commits)")[![luismacayo](https://avatars.githubusercontent.com/u/1909131?v=4)](https://github.com/luismacayo "luismacayo (2 commits)")

---

Tags

laravelpaginationdatatablesmodelsHolacliente

### Embed Badge

![Health badge](/badges/holacliente-laravel-datatables/health.svg)

```
[![Health](https://phpackages.com/badges/holacliente-laravel-datatables/health.svg)](https://phpackages.com/packages/holacliente-laravel-datatables)
```

###  Alternatives

[wenzhixin/bootstrap-table

An extended table to integration with some of the most widely used CSS frameworks. (Supports Bootstrap, Semantic UI, Bulma, Material Design, Foundation)

11.8k287.3k1](/packages/wenzhixin-bootstrap-table)[yajra/laravel-datatables-html

Laravel DataTables HTML builder plugin

29110.4M49](/packages/yajra-laravel-datatables-html)[yajra/laravel-datatables

Laravel DataTables Complete Package.

1036.3M58](/packages/yajra-laravel-datatables)[singlequote/laravel-datatables

This repo contains a Datatable that can render a filterable and sortable table. It aims to be very lightweight and easy to use. It has support for retrieving data asynchronously, pagination and recursive searching in relations

1924.9k](/packages/singlequote-laravel-datatables)[log1x/pagi

A better WordPress pagination.

61115.8k](/packages/log1x-pagi)[josezenem/laravel-slugidable

A package for Laravel that creates slugs for Eloquent models based on title and ID

1166.5k](/packages/josezenem-laravel-slugidable)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
