thinkphp5中要想同時得到查詢記錄的總數量以及分頁的數據, 能夠用paginate(), 真的很是方便!php
表結構:sql
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='註冊用戶表';
表數據截圖:thinkphp
獲取記錄總數和分頁數據:dom
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); }
截圖:thinkphp5
最終運行結果:ui
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個參數裏能夠配置請求的頁碼, 即請求指定頁數據, 示例以下:spa
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); }