Onwuka Gideon é um desenvolvedor freelancer de pilha completa com anos de experiência em projetar e codificar aplicativos da Web e resolver problemas complexos. Ele adora segurança, escrever e discutir novas tecnologias.
Ao criar aplicativos que lidam com um grande número de documentos, é importante usar a paginação para obter linhas por página.
Neste artigo, demonstrarei como implementar a paginação ao trabalhar com N1QL e PHP.
Um pouco sobre o N1QL
O Couchbase N1QL é uma linguagem de consulta declarativa que estende o SQL para JSON. Você pode consultar dados por meio da integração nativa da estrutura e da linguagem, de uma API fluente ou dos drivers JDBC/ODBC. O N1QL oferece aos desenvolvedores uma linguagem expressiva, poderosa e completa para consulta e manipulação de dados.
Pré-requisitos
- Conhecimento básico do Couchbase e sua configuração em seu servidor (Instalação do Couchbase)
- Conhecimento básico de N1QL
- Conhecimento básico de PHP (opcional, pois qualquer linguagem pode ser usada)
- Um SDK do Couchbase disponível (Acesse aqui)
O que construiríamos
Para os fins deste artigo, configuraremos rapidamente um ambiente PHP no qual basicamente extrairemos dados do banco de dados, paginaremos os dados e os exibiremos.
Configuração do ambiente
Etapa 1: criar um novo bucket
Faça login na área de administração do Couchbase e crie um novo nome de bucket comentários
.
Etapa 2: criar um índice para o novo bucket: comentários
Clique na guia de consulta, insira a consulta listada abaixo e clique em executar.
1 |
criar primário índice em `comentários` usando gsi; |
Se tudo correr bem, podemos começar a criar documentos.
Etapa 3: clonar o arquivo inicial do projeto
Criei a estrutura básica dos arquivos que usaremos neste tutorial.
Abra sua linha de comando e clone o repositório do github.
1 |
$ git clone git@github.com:dongido001/php-couchbase-pagination_complete.git |
Agora, abra o arquivo que acabou de clonar em seu navegador. Você deverá ver a seguinte página:
A estrutura do arquivo
O repositório que você acabou de clonar contém 3 arquivos PHP: config.php
, db.php
e index.php
.
O config.php
é onde definimos as informações do nosso banco de dados:
1 2 3 4 5 6 |
<?php /algumas configurações definir("C_USERNAMAE", "Administrador"); definir("C_PASSWORD", "senha"); definir("C_URL", "http://127.0.0.1:8091/"); //eg: localhost:8091 definir("DEFAULT_BUCKET", "comentando"); |
No db.php
Em seguida, nos conectamos ao Couchbase e abrimos um bucket. Você deve alterar os detalhes para que correspondam às informações do Couchbase.
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php $autenticador = novo \Couchbase\ClassicAuthenticator(); $autenticador->agrupamento(C_USERNAMAE, C_PASSWORD); $agrupamento = novo \Couchbase\Aglomerado(C_URL); $agrupamento->autenticar($autenticador); $balde = $agrupamento->openBucket(DEFAULT_BUCKET); Em o `índice.php`, nós ter alguns PHP código em o superior de o arquivo e em o fundo, nós também |
tem algum 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 detalhes de configuração require_once('config.php'); //incluir conexão com o banco de dados. require_once('db.php'); se( $_SERVER['REQUEST_METHOD'] == "POST"){ $uid = uniqid(); $comentário = [ "_id" => $uid, "name" (nome) => $_POST["name" (nome)], "comentário" => $_POST["comentário"], "created_at" => data("Y-m-d H:i:s") ]; $bucket->inserir($uid, $comentário); } ?> ... |
Incluí os dois arquivos, config.php
e db.php
Em seguida, escrevi uma lógica para inserir alguns comentários no banco de dados quando o formulário é enviado.
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="en"> <cabeça> <!-- Necessário meta etiquetas --> <meta conjunto de caracteres="utf-8"> <meta nome="viewport" conteúdo="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="folha de estilo" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integridade="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" origem cruzada="anônimo"> </cabeça> <corpo> <div classe="contêiner"> <div classe="contêiner" estilo="margin-left: auto; margin-right: auto; width: 400px;"> <h4 classe="text-center">Adicionar a comentário</h4> <formulário ação="" método="POST"> <div classe="form-group" (grupo de formulários)> <rótulo para="name" (nome)>Nome:</rótulo> <entrada tipo="texto" classe="form-control" (controle de formulário) nome="name" (nome) necessário> </div> <div classe="form-group" (grupo de formulários)> <rótulo para="comentário">Comentário:</rótulo> <área de texto classe="form-control" (controle de formulário) linhas="5" nome="comentário" necessário> </área de texto> </div> <botão tipo="submit" (enviar) classe="btn btn-primary">Enviar</botão> </formulário> <br /> <div > <h4 classe="text-center">Listagem comentários</h4> </div> <div id="paginação"> </div> </div> </div> </corpo> </html> |
O código HTML exibe um formulário para adicionar e listar comentários.
Agora vamos começar!
Adicione quantos comentários da página você quiser. Em breve, estaremos paginando esses dados.
Buscar conteúdo paginado no banco de dados
Adicione o seguinte à parte do cabeçalho de index.php
que está abaixo de cada código PHP na parte superior.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
/Selecionar todo o conteúdo em nossa consulta $no_per_page = 4; /Esse é o número de itens que queremos por página $página_atual = (isset($_GET['page_id'])) ? $_GET['page_id'] : 1; /Obtém a página atual; se não for definida, o padrão é a página 1 $pular = ($página_atual - 1) * $no_per_page; /Obtém o número total de páginas que queremos ignorar ao fazer a solicitação. Quando estivermos na primeira página, não precisaremos pular nenhum item. $consulta = \Couchbase\N1qlQuery::fromString("SELECT * FROM `commenting` LIMIT $no_per_page OFFSET $skip"); $resultado = $balde->consulta($consulta); //contagem do número total de resultados no banco de dados $total = $balde->consulta(\Couchbase\N1qlQuery::fromString("SELECT COUNT(comment) total FROM `commenting`")); $total = $total->linhas[0]->total; $número_de_páginas = teto( $total/$no_per_página ); //calcular o número de páginas |
Acrescentei comentários ao código acima, que descrevem o que cada um faz. Aqui também usamos LIMITE
E DESLOCAMENTO
que nos permitiu LIMITAR o número de resultados que cada consulta deve retornar. O OFFSET foi usado para pular uma quantidade de dados durante a consulta, dependendo do número da página que estamos acessando no momento.
LIMITE
: A cláusula LIMIT especifica o número máximo de objetos que podem ser retornados em um conjunto de resultados pelo SELECT. Um valor negativo ou um valor maior que 9223372036854775295 (resultado de 1 - 512) é considerado como LIMIT 0.
DESLOCAMENTO
: A cláusula OFFSET especifica um número de objetos a serem ignorados. Se uma cláusula LIMIT também estiver presente, o OFFSET será aplicado antes do LIMIT. O valor OFFSET deve ser um número inteiro não negativo.
Preencher o resultado da consulta na página
Adicione o código abaixo a index.php
dentro dessa tag, imediatamente após <h4 class="text-center">Listagem de comentários</h4>
.
1 2 3 4 5 6 7 8 9 10 |
<?php antes de( $resultado->linhas como $comentário ):?> <div> <div classe="alert alert-success" (alerta alerta-sucesso) função="alerta"> <h5 classe="alert-heading" (cabeçalho de alerta)> Por: <?=$comentário->comentários->nome?>, Criado Em: <?=$comentário->comentários->created_at?> </h5><br> <p> <?=$comentário->comentários->comentário?></p> <hr> </div> </div> <?php endforeach; ?> |
Adicionar o link paginado
Adicione o código abaixo entre essa tag html <div id="pagination"> </div>
na parte inferior do index.php.
|
Aqui, estamos apenas imprimindo o número de páginas para a página.
Sim! Nossa paginação está funcionando agora.
Conclusão
Neste artigo, você aprendeu como implementar a paginação usando o N1QL. Também revisamos DESLOCAMENTO
e LIMITE
e como basicamente executar consultas no Couchbase usando o N1QL. Você pode obter o aplicativo completo aqui: (git@github.com:dongido001/php-couchbase-pagination_complete.git
)
Obrigado pela leitura. Diga-me o que você achou ou se tiver alguma dúvida.
Esta postagem faz parte do Programa de Redação da Comunidade Couchbase