abb / paginator
简单灵活的PHP分页器
1.2.0
2021-04-17 09:40 UTC
Requires
- php: ^7.1 || ^8.0
Requires (Dev)
- doctrine/dbal: ^2.5
- phpunit/phpunit: ^7
This package is auto-updated.
Last update: 2024-09-17 16:50:35 UTC
README
简单灵活的PHP分页器,灵感来源于 Pagerfanta 和 Symfony Demo Paginator。
需求
- PHP 7.1 或更高版本。
安装
推荐的安装方式是通过 Composer。
$ composer require abb/paginator
可用的适配器
DoctrineDbalAdapter
使用示例
<?php use Abb\Paginator\Adapter\DoctrineDbalAdapter; use Abb\Paginator\Paginator; use Doctrine\DBAL\DriverManager; $connection = DriverManager::getConnection(/*...*/); $qb = $connection->createQueryBuilder() ->select('p.*') ->from('posts', 'p') ->where('p.published = true'); $adapter = new DoctrineDbalAdapter($qb); $pageSize = 5; // default 10 $paginator = new Paginator($adapter, $pageSize); $page = 1; $paginationResult = $paginator->paginate($page); // will return \Abb\Paginator\PaginationResult object
自定义计数查询构建器修改器的使用示例
<?php use Abb\Paginator\Adapter\DoctrineDbalAdapter; use Abb\Paginator\Paginator; use Doctrine\DBAL\DriverManager; use Doctrine\DBAL\Query\QueryBuilder; $connection = DriverManager::getConnection(/*...*/); $qb = $connection->createQueryBuilder() ->select('p.*') ->from('posts', 'p') ->where('p.published = true'); $countQbModifier = function (QueryBuilder $qb): QueryBuilder { return $qb->select('count(distinct p.id) AS cnt') ->setMaxResults(1); }; $adapter = new DoctrineDbalAdapter($qb, $countQbModifier); $paginator = new Paginator($adapter); $paginationResult = $paginator->paginate(1);
DoctrineDbalPlainSqlAdapter
使用示例
use Abb\Paginator\Adapter\DoctrineDbalPlainSqlAdapter; use Abb\Paginator\Paginator; use Doctrine\DBAL\DriverManager; $connection = DriverManager::getConnection(/*...*/); $sql = 'SELECT * FROM posts p LEFT JOIN comments c ON p.id = c.post_id WHERE p.username = :username ORDER BY p.id'; // WITH queries (PostgreSQL) are also supported, e.g. // $sql = 'WITH posts_with_comments AS (SELECT * FROM posts p LEFT JOIN comments c ON p.id = c.post_id) // SELECT * FROM posts_with_comments pwc WHERE pwc.username = :username ORDER BY pwc.id'; $adapter = new DoctrineDbalPlainSqlAdapter($connection, $sql, ['username' => 'John Doe']); $paginator = new Paginator($adapter); $paginationResult = $paginator->paginate(1);