thinkphp5 数据库查询之paginate: 同时获取记录总数和分页数据
2023-09-27 14:24:39 时间
thinkphp5中要想同时获得查询记录的总数量以及分页的数据, 可以用paginate(), 真的非常方便!
表结构:
CREATE TABLE `t_users` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `email` varchar(128) COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '登录账号', `passwd` varchar(128) COLLATE utf8mb4_bin NOT NULL DEFAULT '', `nickname` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '昵称', `company` varchar(256) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '公司', `contact` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '联系人', `address` varchar(256) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '详细地址', `city` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '城市', `country` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '国家', `province` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '省/州', `zip_code` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '邮政编码', `phone` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '电话', `token` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '登录唯一凭证, 登录时更新', `check` tinyint(1) DEFAULT '0' COMMENT '0-未通过, 1-通过', `check_time` timestamp NULL DEFAULT NULL COMMENT '审核时间', `time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='注册用户表';
表数据截图:
获取记录总数和分页数据:
public function test() { $r = db(self::TABLE)->paginate(3, false); // $r = model(self::TABLE)->paginate(3, false); print_r($r); $data = [ 'total' => $r->total(), // 总记录数 'cur' => $r->currentPage(), // 当前页码 'size' => $r->listRows(), // 每页记录数 'list' => $r->items() // 分页数据 ]; print_r($data); }
截图:
最终运行结果:
cmf\paginator\Bootstrap Object ( [simple:protected] => [items:protected] => think\Collection Object ( [items:protected] => Array ( [0] => Array ( [id] => 1 [email] => 1@163.com [passwd] => e10adc3949ba59abbe56e057f20f883e [nickname] => [company] => [contact] => [address] => [city] => [country] => United Kingdom [province] => [zip_code] => [phone] => [token] => ae4e61fa4ec3b7fc144603e4ca8e1f83 [check] => 1 [check_time] => 2019-08-21 22:23:16 [time] => 2019-08-19 10:25:18 ) [1] => Array ( [id] => 4 [email] => 1121@163.com [passwd] => e10adc3949ba59abbe56e057f20f883e [nickname] => [company] => [contact] => [address] => [city] => [country] => 日本 [province] => [zip_code] => [phone] => [token] => f1267ace3614544c7eda97e8b831f5ac [check] => 1 [check_time] => [time] => 2019-08-19 12:32:25 ) [2] => Array ( [id] => 7 [email] => 1112312@163.com [passwd] => e10adc3949ba59abbe56e057f20f883e [nickname] => [company] => [contact] => [address] => [city] => [country] => 日本 [province] => [zip_code] => [phone] => [token] => ae0ffcc37d1f6f564e6045892f04a5ea [check] => 0 [check_time] => [time] => 2019-08-19 16:43:13 ) ) ) [currentPage:protected] => 1 [lastPage:protected] => 2 [total:protected] => 6 [listRows:protected] => 3 [hasMore:protected] => 1 [options:protected] => Array ( [var_page] => page [path] => /admin/users/test [query] => Array ( ) [fragment] => [type] => \cmf\paginator\Bootstrap [list_rows] => 15 ) ) Array ( [total] => 6 [cur] => 1 [size] => 3 [list] => Array ( [0] => Array ( [id] => 1 [email] => 1@163.com [passwd] => e10adc3949ba59abbe56e057f20f883e [nickname] => [company] => [contact] => [address] => [city] => [country] => United Kingdom [province] => [zip_code] => [phone] => [token] => ae4e61fa4ec3b7fc144603e4ca8e1f83 [check] => 1 [check_time] => 2019-08-21 22:23:16 [time] => 2019-08-19 10:25:18 ) [1] => Array ( [id] => 4 [email] => 1121@163.com [passwd] => e10adc3949ba59abbe56e057f20f883e [nickname] => [company] => [contact] => [address] => [city] => [country] => 日本 [province] => [zip_code] => [phone] => [token] => f1267ace3614544c7eda97e8b831f5ac [check] => 1 [check_time] => [time] => 2019-08-19 12:32:25 ) [2] => Array ( [id] => 7 [email] => 1112312@163.com [passwd] => e10adc3949ba59abbe56e057f20f883e [nickname] => [company] => [contact] => [address] => [city] => [country] => 日本 [province] => [zip_code] => [phone] => [token] => ae0ffcc37d1f6f564e6045892f04a5ea [check] => 0 [check_time] => [time] => 2019-08-19 16:43:13 ) ) )
===============================================
另外, paginate中第3个参数里可以配置请求的页码, 即请求指定页数据, 示例如下:
public function test() { $r = db(self::TABLE)->alias('a') ->join('users_good b', 'b.uid = a.id') ->field('uid, a.check,b.chinese,b.math') ->paginate(3, false, [ 'page' => 2 // 指定请求的页码 ]); print_r($r); $data = [ 'total' => $r->total(), // 总记录数 'cur' => $r->currentPage(), // 当前页码 'size' => $r->listRows(), // 每页记录数 'list' => $r->items() // 分页数据 ]; print_r($data); }
相关文章
- 数据库练习题:学生表(学号,姓名,性别,系部,年龄)选课表(学号,课程号,成绩)课程表(课程号,课程名,学分)
- SpringBoot2 整合 ClickHouse数据库,实现高性能数据查询分析
- JavaScript日历控件开发 C# 读取 appconfig文件配置数据库连接字符串,和配置文件 List<T>.ForEach 调用异步方法的意外 ef 增加或者更新的习惯思维 asp.net core导入excel 一个二级联动
- mysql的安装,数据库的操作,创建数据库,修改表,创建表,删除表,插入数据mysql是什么?
- Oracle可插拔数据库的jdbc连接串写法
- Oracle数据库:oracle数据定义语言DDL,查询表、序列、索引、视图、创建表,修改表的列alter,rename to,删除表数据truncate和表drop
- 数据库新增一条数据,前端页面却看不到?
- [转]数据库物化视图刷新SQL命令和查询被delete掉的数据
- Android之ListView,AsyncTask,GridView,CardView,本地数据存储,SQLite数据库
- 《Oracle数据库管理与维护实战》——2.8 数据库访问
- 《Oracle数据库管理与维护实战》——2.11 Oracle数据字典
- Swift - 操作SQLite数据库(引用SQLite3库)
- SwiftUI SQLite数据大全之 如何创建加密数据库并在项目中读取加密数据 (SQLite.swift SQLCipher教程含源码)
- 《数据科学:R语言实现》——2.6 从数据库中读取数据
- java从数据库查询数据存在redis中
- 数据库中随机查询数据
- 浅析Docker数据管理-数据库容器化并持久化:数据卷概念、创建数据卷的2种方式、docker volume用法
- 用Java实现向Cassandra数据库中插入和查询数据
- (4.33)sql server2014内存数据库(内存中OLTP(In-Memory OLTP))
- 连接数据后,当执行查询语句报错:ORA-01219: 数据库未打开: 仅允许在固定表/视图中查询
- EF 查询 数据与数据库不同;EF 查询 数据重复和缺失问题;
- 同步mysql部分表数据到docker容器中的mysql数据库供其他程序使用,附实际例子源码和镜像
- mysql数据库全文多库多表查找,查询所有数据库中包含指定字符的数据
- IDENTITY_INSERT:java数据库操作JDBC-SQL插入数据(含自增列)