关于数据库查询的chunk方法

来源:2-2 数据库查询操作

陌生人别撩我

2018-03-07 22:07

function DBChunk(){
    Db::table('book_list')->chunk(20,function ($results){
        foreach ($results as $v){
            dump($v);//打印数组 输出遍历所处的一条记录
        }
        echo '-----------------------------------分页----------------------';
    });

    //与上述方法相同。只不过回调函数不在方法内处理,将回调函数交给pageSplit方法
    Db::table('book_list')->chunk(20,'pageSplit');

}

function pageSplit($result){
    return false;
}

老师,关于手册这个看不明白

官方说明文档:

http://img1.mukewang.com/5a9ff19c0001447f06650293.jpg

文档里不是写方法的名字?我也是写方法名啊,为什么这样直接报错。。。不是很懂这个例子的意思


我以为视频会将chunk这个查询,结果看了两遍视频发现没讲!


写回答 关注

1回答

  • 陌生人别撩我
    2018-03-07 22:09:17
    <?php
    namespace app\index\controller;
    use think\Config;
    use think\Db;
    class Index
    {
        public function index()
        {
            $this->DBconnect();        //1、连接数据库
            $this->DBQuery();        //2、使用查询语句
            $this->DBChunk();        //3、数据集分批处理
        }
        function DBconnect(){
            //1、连接数据库
    //        $dbcon = Db::connect();//直接连接 参数在配置文件里配置 如果使用了自定义database配置,那么优先使用自定义配置的文件,如果没有,再使用默认的database配置
    //        $dbcon = Db::connect("mysql://root:@127.0.0.1:3306/itcast#utf8");//数据库类型://用户名:密码@数据库地址:数据库端口/数据库名#字符集
    //        $dbcon = Db::connect(
    //            [
    //                'type'            => 'mysql',
    //                'hostname'        => '127.0.0.1',
    //                'database'        => 'itcast',
    //                'username'        => 'root',
    //                'password'        => '',
    //                'hostport'        => '',
    //                'debug'           => true
    //            ]
    //        );//直接写入配置
            $dbcon = Db::connect(Config::get('db_config1'));//使用了自定义配置中的自定义db_config1
            dump($dbcon);
        }
        function DBQuery(){
            //2、使用查询语句
            //查询book_list中id=1的记录
    //        $find_query=Db::name('list')->where('id',1)->find();     //配置了表前缀 则使用name(未配置表前缀使用table方法),省略了book_
            //查询book_list中id=1的记录
            $find_query=Db::table('book_list')->where('id',1)->find();     //find 方法返回结果,不存在返回null
            //查询book_list中id=1的记录
            $selete_query=Db::table('book_list')->where('id',1)->select();     //selete 方法返回结果集,不存在返回空数组
            //查询book_list中id=1的记录中某个字段的值 (相当于某个表的单元格,非一行数据)
            $value_query = Db::table('book_list')->where('id',1)->value('bname');//value方法不存在返回null, 取出ID为1的记录,再查找字段 书名对应的值
            //column 返回数组 查询某一个字段对应的所有记录
            $column_query = Db::table('book_list')->where('id',2)->column('bname');//查询ID为2的书名
    //        $column_query = Db::table('book_list')->column('bname');//查询表中书名的一列的所有值,返回一个数组
            dump($find_query);
            dump($selete_query);
            dump($column_query);
        }
        function DBChunk(){
            //3、数据集分批处理
            /**该方法一次获取结果集的一小块,然后填充每一小块数据到要处理的闭包
             *比如数据库有一万条记录,每页显示100条
             *则可以使用chunk分批处理,每次处理100条后分页,再进行处理
            */
            /**
             * 例:book_list 表中现在有5条数据
             * 我们分3页
             * 则每页有2条数据
             * 所以 chunk(2,回调函数);
             * 在回调函数中,foreach进行遍历处理
             */
            Db::table('book_list')->chunk(2,function ($results){
                foreach ($results as $v){
                    //传入$results数组用来遍历,foreach则根据$results的长度来判断需要循环几次,将每一次遍历的成员再赋值给变量$v,以供后续进行使用
                    //$v表示2条中的其中一条,此处$v是一条记录,是数组变量
                    dump($v);//打印数组 输出遍历所处的一条记录
                }
                echo '-----------------------------------分页----------------------';
            });
            //与上述方法相同。只不过回调函数不在方法内处理,将回调函数交给PageSplit方法
            Db::table('book_list')->chunk(2,'pageSplit');
        }
        function pageSplit($result){
            return false;
        }
    }

    顺便分享一下自己看了这一节视频所做的笔记!

快速入门ThinkPHP 5.0 --模型篇

Thinkphp5.0已发布多时,想了解thinkphp 5.0的新特性吗?老司机点准时出发

27110 学习 · 100 问题

查看课程

相似问题