luanmaik/pdo-paginator
这个库允许使用PDO扩展轻松实现分页
1.0
2020-08-11 00:13 UTC
Requires
- php: ^7.1
- ext-pdo: *
Requires (Dev)
- phpunit/phpunit: ^9
This package is auto-updated.
Last update: 2024-09-12 07:28:32 UTC
README
这个库可以帮助您使用PDO轻松创建记录分页。
使用Composer安装
composer require luanmaik/pdo-paginator
常用解决方案
使用 SQL_CALC_FOUND_ROWS & FOUND_ROWS()
# Search data SELECT SQL_CALC_FOUND_ROWS * FROM user WHERE role = 'admin' LIMIT 10 OFFSET 5; # Get number rows existents in previous query SELECT FOUND_ROWS();
优点:简单
缺点:当使用复杂查询时较慢。 FOUND_ROWS() 已弃用。
使用 COUNT()
# Search data SELECT * FROM user WHERE role = 'admin' LIMIT 10 OFFSET 5; # Get number rows existents SELECT count(*) FROM user WHERE role = 'admin';
优点:易于阅读且效率高。
缺点:冗长。
这个库是如何工作的?
它使用 count(*) 分页方法(如上所述),但具有简单的实现。您设置查询,库在幕后定义 limit 和 offset 指令,并运行一个使用 count(*) 的第二个查询以找到可用的总记录数。
请参阅下面的示例。
简单用法示例
$paginator = new PDOPaginator\PDOPaginator($pdoConnection); // Don't define the LIMIT instruction in your query $paginator->query("SELECT * FROM users"); $paginationCollection = $paginator->execute($perPage = 15, $page = 1); $paginationCollection->getTotal(); // Return total number of data in databse; $paginationCollection->getData(); // Return array data; $paginationCollection->getPerPage(); // 15 ... Return the number of registers per page $paginationCollection->getPage(); // 1 ... Return the number page $paginationCollection->getTotalPages(); // Return the total number of pages $paginationCollection->getPaginationArray(); // Return the pagination details in array
条件查询参数示例
使用 bindValue()
方法。
$paginator = new PDOPaginator\PDOPaginator($pdoConnection); $paginator->query("SELECT * FROM users WHERE role = :role"); $paginator->bindValue(':role', 'admin', PDO::PARAM_STR); $paginationCollection = $paginator->execute($perPage = 15, $page = 1);
自定义获取模式
在 execute()
方法中使用第三个和第四个参数。
$paginator = new PDOPaginator\PDOPaginator($pdoConnection); $paginator->query("SELECT * FROM users"); $paginationCollection = $paginator->execute($perPage = 15, $page = 1, PDO::FETCH_CLASS, User::class); $paginationCollection->getData(); // returns User[]
自定义集合
在 __construct()
方法中使用第二个参数。自定义类必须实现 \PDOPaginator\PDOPaginationCollectionInterface
。
// Create a custom collection class MyCustomCollection extends \ArrayIterator implements \PDOPaginator\PDOPaginationCollectionInterface { //... } //OR you can extends the default collection implementation class MyCustomCollection extends \PDOPaginator\PDOPaginationCollection { // overwrite some methods like toArray(), getPaginationArray(), etc. } $paginator = new PDOPaginator\PDOPaginator($pdoConnection, MyCustomCollection::class); $paginator->query("SELECT * FROM users"); $paginationCollection = $paginator->execute($perPage = 15, $page = 1, PDO::FETCH_CLASS, User::class);