thinkphp5 數據庫查詢之paginate: 同時獲取記錄總數和分頁數據

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);
    }
相關文章
相關標籤/搜索