为了账号安全,请及时绑定邮箱和手机立即绑定

关于数据库查询的chunk方法

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.sycdn.imooc.com//5a9ff19c0001447f06650293.jpg

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


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


正在回答

1 回答

<?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;
    }
}

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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

关于数据库查询的chunk方法

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信