美文网首页程序员
PDO分页查询模块介绍

PDO分页查询模块介绍

作者: Vett | 来源:发表于2017-08-23 21:49 被阅读0次

    简介

    源码请移步GitHub

    schu-database是SchuEngine中的数据库模块,可以独立使用,也可以利用zend-servicemanager驱动.

    与上个版本的schu-database不同,这个版本完全脱离zend-db,依托于使用最广泛的PDO扩展,实现与数据库的交互.

    之所以弃用zend-db作为底层,是因为其高昂的学习成本,直接导致了schu-database更加高昂的学习成本,需要不停的查阅手册,这不利于SchuEngine最初的期望.

    在用法上schu-database完全等同于PDO的原生操作,最大程度上降低了学习成本.

    在分页上,schu-database会通过传入的SQL语句.在原有SQL的基础上,自动生成分页查询,并且调用极其简单.

    依赖

    PDO扩展

    安装

    $ composer require schuengine/schu-database
    

    配置

    一般情况下(完全等同于PDO的__construct):

    <?php
    
    use Schu\Database\Database;
    
    /**
     * data source name of PDO $dsn
     * db username $user
     * db password $password
     * options array $options
     */
    $db = new Database($dsn, $user, $password, $options);
    
    

    传入数组:

    <?php
    
    use Schu\Database\Database;
    
    $dbOptions = [
        'dsn' => 'mysql:host=localhost;dbname=test',
        'username' => 'username',
        'password' => '********',
        'options' => [
            //PDO options
        ],
    ];
    
    $db = new Database($dbOptions);
    

    通过zend-servicemanager

    //在 ./config/autoload/global.php中
    'schu-database' => [
        'dsn' => 'mysql:host=localhost;dbname=test',
        'options' => [
            //PDO options
        ],
    ],
    
    //在./config/autoload/local.php中
    'schu-database' => [
        'username' => 'username',
        'password' => '********',
    ],
    
    //在应用中
    $db = $container->get('schu-database');
    
    

    使用

    在使用过程中,schu-database的操作完全继承了PDO,比PDO多一个接口,即分页.后续介绍.

    所以,你可以直接将Schu\Database\Database即上例中的$db当做PDO来操作.

    分页

    schu-database的分页接口非常简单如下:

    /**
     * Get paginator result 
     * 
     * @param  integer $page 
     * @param  integer $itemCountPerPage 
     * @param  string $sql 
     * @throws \Schu\Database\Exception\InvalidArgumentException 
     * @throws \Schu\Database\Exception\RuntimeException
     * @return Page 
     */ 
     public function getPaginatorResult($page, $itemCountPerPage, $sql);
    

    调用后,schu-database会自动解析传入的SQL语句.

    1. 获得原始的ORDER BY,LIMIT,OFFSET以及子查询语句.
    2. 生成原SQL语句的COUNT语句.
    3. 比对LIMITCOUNT结果,输出正确的结果集总数.
    4. 生成分页查询语句.
    5. 实例化\Schu\Database\Page,并返回.

    类\Schu\Database\Page中包含分页结果集的全部数据,包括:

    1. 当前页
    2. 总页数
    3. 每页条目数
    4. 总条目数
    5. 结果集数组
    6. 原查询语句
    7. 分页查询语句
    8. COUNT语句

    详细API请移步PageInterface

    相关文章

      网友评论

        本文标题:PDO分页查询模块介绍

        本文链接:https://www.haomeiwen.com/subject/ltwjdxtx.html