Onwuka Gideon es un desarrollador freelance full stack con años de experiencia diseñando y codificando aplicaciones web y resolviendo problemas complejos. Le encanta la seguridad, escribir y hablar de nuevas tecnologías.

Cuando se crean aplicaciones que manejan un gran número de documentos, es importante utilizar la paginación para obtener filas por página.
En este artículo, voy a demostrar cómo implementar la paginación cuando se trabaja con N1QL y PHP.
Un poco sobre N1QL
Couchbase N1QL es un lenguaje de consulta declarativo que extiende SQL para JSON. Puedes consultar datos a través de la integración nativa del framework y el lenguaje, una API fluida o los drivers JDBC/ODBC. N1QL ofrece a los desarrolladores un lenguaje expresivo, potente y completo para consultar y manipular datos.
Requisitos previos
- Conocimientos básicos de Couchbase y tenerlo configurado en su servidor (Instalación de Couchbase)
- Conocimientos básicos de N1QL
- Conocimientos básicos de PHP (opcional, ya que se puede utilizar cualquier lenguaje)
- Un SDK de Couchbase disponible (Ir aquí)
Qué construiríamos
Para el propósito de este artículo, configuraremos rápidamente un entorno PHP en el que básicamente extraeremos datos de la base de datos, paginaremos los datos y los mostraremos.
Configuración del entorno
Paso 1: crear un nuevo cubo
Accede a tu área de administración de Couchbase y crea un nuevo nombre de bucket comentarios.

Paso 2: crear un índice para el nuevo bucket: comentarios
Haz clic en la pestaña de consulta, inserta la consulta que aparece a continuación y haz clic en ejecutar.
|
1 |
crear principal índice en `comentarios` utilizando gsi; |
Si todo va bien, podemos empezar a crear documentos.
Paso 3: clonar el archivo de inicio del proyecto
He creado la estructura básica de los archivos que utilizaremos en este tutorial.
Abre tu línea de comandos y clona el repositorio de github.
|
1 |
$ git clonar git@github.com:dongido001/php-couchbase-paginación_completa.git |
Ahora, abre el archivo que acabas de clonar en tu navegador. Deberías ver la siguiente página:

La estructura de los ficheros
El repositorio que acaba de clonar contiene 3 ficheros PHP: config.php, db.phpy index.php.
En config.php es donde definimos la información de nuestra base de datos:
|
1 2 3 4 5 6 |
<?php /algunas configuraciones defina("C_USERNAMAE", "Administrador"); defina("C_PASSWORD", "contraseña"); defina("C_URL", "http://127.0.0.1:8091/"); //eg: localhost:8091 defina("DEFAULT_BUCKET", "comentando"); |
En el db.phpNos conectamos a Couchbase y abrimos un bucket. Deberías cambiar los detalles para que se correspondan con tu información de Couchbase.
|
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php $autentificador = nuevo \Couchbase\AutenticadorClásico(); $autentificador->grupo(C_USERNAMAE, C_PASSWORD); $grupo = nuevo \Couchbase\Grupo(C_URL); $grupo->autentifique($autentificador); $cubo = $grupo->openBucket(DEFAULT_BUCKET); En el `índice.php`, nosotros tienen algunos PHP código en el top de el archivo y en el fondo, nosotros también |
tienen algo de código HTML.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
//index.php <?php //incluir detalles de configuración require_once(config.php); //incluir conexión a la base de datos. require_once(db.php); si( $_SERVIDOR['REQUEST_METHOD'] == "POST"){ $uid = uniqid(); $comentario = [ "_id" => $uid, "nombre" => $_POST["nombre"], "comentario" => $_POST["comentario"], "fecha_creada" => fecha("Y-m-d H:i:s") ]; $bucket->insertar($uid, $comentario); } ?> ... |
He incluido los dos archivos, config.php y db.php entonces escribí lógica para insertar algunos comentarios en la base de datos cuando se envía el formulario.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
//index.php ... <!DOCTYPE html> <html lang="es"> <cabeza> <!-- Requerido meta etiquetas --> <meta conjunto de caracteres="utf-8"> <meta nombre="viewport" contenido="width=anchura-dispositivo, escala-inicial=1, encoger-para-ajustar=no"> <!-- Bootstrap CSS --> <enlace rel="hoja de estilo" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integridad="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anónimo"> </cabeza> <cuerpo> <div clase="contenedor"> <div clase="contenedor" estilo="margin-left: auto; margin-right: auto; width: 400px;"> <h4 clase="texto-centro">Añadir a comentario</h4> <formulario acción="" método="POST"> <div clase="forma-grupo"> <etiqueta para="nombre">Nombre:</etiqueta> <entrada tipo="texto" clase="control-forma" nombre="nombre" obligatorio> </div> <div clase="forma-grupo"> <etiqueta para="comentario">Comentario:</etiqueta> <textarea clase="control-forma" filas="5" nombre="comentario" obligatorio> </textarea> </div> <botón tipo="enviar" clase="btn btn-primary">Enviar</botón> </formulario> <br /> <div > <h4 clase="texto-centro">Listado comentarios</h4> </div> <div id="paginación"> </div> </div> </div> </cuerpo> </html> |
El código HTML muestra un formulario para añadir y listar comentarios.
Empecemos.
Añade tantos comentarios de la página como quieras. En breve paginaremos esos datos.
Obtener contenido paginado en la base de datos
Añada lo siguiente a la parte de cabecera de index.php que está debajo de cada código PHP en la parte superior.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
//Seleccionar todo el contenido de nuestra consulta $no_por_página = 4; //Este es el número de elementos que queremos por página $página_actual = (isset($_GET[page_id])) ? $_GET[page_id] : 1; //Obtiene la página actual, si no se establece, por defecto la página 1 $omitir = ($página_actual - 1) * $no_por_página; //Obtiene el número total de páginas que queremos saltar al hacer la petición. Cuando estamos en la página uno, no necesitamos saltar ningún Item. $consulta = \Couchbase\N1qlQuery::fromString("SELECT * FROM `commenting` LIMIT $no_per_page OFFSET $skip"); $resultado = $cubo->consulta($consulta); //contar el número total de resultados en la base de datos $total = $cubo->consulta(\Couchbase\N1qlQuery::fromString("SELECT COUNT(comment) total FROM `commenting`")); $total = $total->filas[0]->total; $número_de_páginas = ceil( $total/$no_per_página ); //calcular el número de páginas |
He añadido comentarios al código anterior, que describen lo que hace cada uno. Aquí también utilizamos LÍMITE Y OFFSET que nos permitió LIMITAR el número de resultados que debe devolver cada consulta. El OFFSET se utilizó para saltar una cantidad de datos al consultar dependiendo del número de página al que estamos accediendo en ese momento.
LÍMITE: La cláusula LIMIT especifica el número máximo de objetos que se pueden devolver en un conjunto de resultados mediante SELECT. Un valor negativo o un valor superior a 9223372036854775295 (resultado de 1 - 512) se considera LIMIT 0.
OFFSET: La cláusula OFFSET especifica un número de objetos que deben omitirse. Si también hay una cláusula LIMIT, el OFFSET se aplica antes que el LIMIT. El valor de OFFSET debe ser un número entero no negativo.
Introducir el resultado de la consulta en la página
Añada el código siguiente a index.php dentro de esta etiqueta, inmediatamente después de <h4 class="text-center">Comentarios</h4> .
|
1 2 3 4 5 6 7 8 9 10 |
<?php foreach( 1TP4Resultado->filas como $comentario ):?> <div> <div clase="alerta-éxito" papel="alerta"> <h5 clase="alerta-encabezamiento"> Por: <?=$comentario->comentarios->nombre?>, Creado En: <?=$comentario->comentarios->fecha_de_creación?> </h5><br> <p> <?=$comentario->comentarios->comentario?></p> <hr> </div> </div> <?php endforeach; ?> |
Añadir el enlace paginado
Añade el siguiente código entre esta etiqueta html <div id="pagination"> </div> en la parte inferior de index.php.
|
Aquí sólo estamos imprimiendo el número de páginas a la página.
Sí. Nuestra paginación ya funciona.

Conclusión
En este artículo, has aprendido cómo implementar la paginación utilizando N1QL. También hemos revisado OFFSET y LÍMITE y cómo básicamente ejecutar consultas en Couchbase usando N1QL. Puedes obtener la aplicación completa aquí: (git@github.com:dongido001/php-couchbase-pagination_complete.git)
Gracias por leernos. Dígame lo que piensa o si tiene alguna pregunta.
Este post forma parte del Programa de Escritura de la Comunidad Couchbase