第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

ThinkPHP 分頁和原生查詢

1. 前言

本小節(jié)介紹 ThinkPHP 框架的分頁查詢和原生查詢,通過定義一個(gè)學(xué)生列表來介紹分頁查詢的目的是限制請(qǐng)求返回的數(shù)據(jù)量,防止內(nèi)存被打滿,原生查詢主要用于 sql 語句比較復(fù)雜的場(chǎng)景。

2. 批量添加多條學(xué)生信息

為了演示方便需要添加多條學(xué)生信息,下面給出 ThinkPHP 添加多條學(xué)生信息的方法:

    public function addStudents()
    {
        $nameArr = ["吳小明", "張紅", "趙四", "王五", "錢學(xué)", "孫空", "李珍"];
        $ageArr = [18, 19, 20, 21, 22, 23, 24, 25];
        $saveArr = [];
        $createdAt = time();
        for ($i = 0; $i < 200; $i++) {
            $arr = [];
            $arr['name'] = $nameArr[array_rand($nameArr)];
            $arr['age'] = $ageArr[array_rand($ageArr)];
            $arr['id_number'] = "42011720100512" . mt_rand(1000, 9999);
            $arr['status'] = 1;
            $saveArr[] = $arr;
        }
        Db::table('student')->insert($saveArr);
        return json('添加成功');
    }

Tips: 也可以通過 sql 語句在 MySQL 客戶端自行添加。

如下圖所示:
圖片描述

3. 獲取學(xué)生分頁列表接口

3.1 定義路由

首先在 study.php 路由文件添加 GET 路由如下:

//獲取學(xué)生列表接口
Route::get('students', 'app\controller\Study\StudentController@getStudents');

如下圖所示:
圖片描述

3.2 定義路由指向的方法

下面定義一下路由里面指向的 getStudents() 方法,方法如下:

    /**
     * 獲取學(xué)生列表
     * @return \think\response\Json
     * @throws \think\db\exception\DbException
     */
    public function getStudents()
    {
        //每頁條數(shù)
        $size = (int)$this->request->param('size', 15);

        $students = StudentModel::where('status', 1)->order('created_at DESC')->paginate($size);

        return json($students);
    }

Tips: paginate($size) 方法表示使用數(shù)據(jù)庫查詢分頁且每頁 $size 條,order('created_at DESC') 表示列表按照創(chuàng)建時(shí)間倒序。

3.4 請(qǐng)求接口獲取分頁學(xué)生列表

如下圖所示,可以在 postman 請(qǐng)求上述定義好的學(xué)生分頁列表:
圖片描述

Tips: page 表示翻頁參數(shù),這個(gè)參數(shù)不需要在控制器去接收,框架中的 paginate() 方法底層代碼會(huì)處理 page 參數(shù),但 size 參數(shù)是需要在控制器接收的,這里列表數(shù)據(jù)沒有處理時(shí)間格式。
下面對(duì)返回參數(shù)說明一下:

返回參數(shù) 含義描述
total 總條數(shù)
per_page 每頁條數(shù)
current_page 當(dāng)前頁數(shù)
last_page 總頁數(shù)
data 列表數(shù)據(jù)

4. 原生查詢

下面主要介紹一下 ThinkPHP 框架原生查詢,一般情況下,框架自帶的方法都可以滿足大多數(shù)查詢需求,但有時(shí)候?qū)τ趶?fù)雜的 sql 查詢邏輯,使用原生查詢比較合適,下面定義一個(gè)方法使用原生查詢獲取學(xué)生列表數(shù)據(jù):

    /**
     * 獲取學(xué)生列表
     * @return \think\response\Json
     * @throws \think\db\exception\DbException
     */
    public function getStudents()
    {
        //每頁條數(shù)
        $size = (int)$this->request->param('size', 15);
        //頁數(shù)
        $page = (int)$this->request->param('page', 1);
        $limit = ($page - 1) * $size;

        $students = Db::query("select * from `student` where `status`=1 order by created_at desc limit {$limit},{$size}");

        return json($students);
    }

page=2、size=5 返回?cái)?shù)據(jù)如下:

[
    {
        "id": 6,
        "name": "王五",
        "age": 25,
        "id_number": "420117201005123617",
        "created_at": 1603617951,
        "update_at": 0,
        "status": 1
    },
    {
        "id": 7,
        "name": "張紅",
        "age": 19,
        "id_number": "420117201005123721",
        "created_at": 1603617951,
        "update_at": 0,
        "status": 1
    },
    {
        "id": 8,
        "name": "吳小明",
        "age": 21,
        "id_number": "420117201005123197",
        "created_at": 1603617951,
        "update_at": 0,
        "status": 1
    },
    {
        "id": 9,
        "name": "錢學(xué)",
        "age": 19,
        "id_number": "420117201005121149",
        "created_at": 1603617951,
        "update_at": 0,
        "status": 1
    },
    {
        "id": 10,
        "name": "孫空",
        "age": 21,
        "id_number": "420117201005124671",
        "created_at": 1603617951,
        "update_at": 0,
        "status": 1
    }
]

Tips: 此時(shí)的數(shù)據(jù)結(jié)構(gòu)和上面分頁的不一樣。

5. 小結(jié)

本小節(jié)介紹了如何使用分頁查詢學(xué)生列表,分頁查詢的目的就是為了控制每頁的條數(shù)從控制請(qǐng)求數(shù)據(jù)量過大的問題,分頁查詢中的 page 參數(shù)表示頁數(shù),這個(gè)參數(shù)在 ThinkPHP 框架中會(huì)自動(dòng)處理,每頁條數(shù)默認(rèn)是 15,若需要改變分頁每頁條數(shù),則需要向 paginate() 方法傳遞條數(shù)參數(shù)。

Tips: 代碼倉庫:https://gitee.com/love-for-poetry/tp6