版本功能调整
    5.0.5原生查询不支持返回数据集对象

    数据库的查询结果也就是数据集,默认的配置下,数据集的类型是一个二维数组,我们可以配置成数据集类,就可以支持对数据集更多的对象化操作,需要使用数据集类功能,可以配置数据库的resultset_type参数如下:

    1. return [
    2. // 数据库类型
    3. 'type' => 'mysql',
    4. // 数据库连接DSN配置
    5. 'dsn' => '',
    6. // 服务器地址
    7. 'hostname' => '127.0.0.1',
    8. // 数据库名
    9. 'database' => 'thinkphp',
    10. // 数据库用户名
    11. 'username' => 'root',
    12. // 数据库密码
    13. 'password' => '',
    14. // 数据库连接端口
    15. 'hostport' => '',
    16. // 数据库连接参数
    17. 'params' => [],
    18. // 数据库编码默认采用utf8
    19. 'charset' => 'utf8',
    20. // 数据库表前缀
    21. 'prefix' => 'think_',
    22. // 数据集返回类型
    23. 'resultset_type' => 'collection',
    24. ];

    返回的数据集对象是think\Collection,提供了和数组无差别用法,并且另外封装了一些额外的方法。

    可以直接使用数组的方式操作数据集对象,例如:

    1. // 获取数据集
    2. $users = Db::name('user')->select();
    3. // 直接操作第一个元素
    4. $item = $users[0];
    5. // 获取数据集记录数
    6. $count = count($users);
    7. // 遍历数据集
    8. foreach($users as $user){
    9. echo $user['name'];
    10. echo $user['id'];
    11. }

    需要注意的是,如果要判断数据集是否为空,不能直接使用empty判断,而必须使用数据集对象的isEmpty方法判断,例如:

    1. $users = Db::name('user')->select();
    2. if($users->isEmpty()){
    3. echo '数据集为空';
    4. }

    Collection类包含了下列主要方法:

    方法描述
    isEmpty是否为空
    toArray转换为数组
    all所有数据
    merge合并其它数据
    diff比较数组,返回差集
    flip交换数据中的键和值
    intersect比较数组,返回交集
    keys返回数据中的所有键名
    pop删除数据中的最后一个元素
    shift删除数据中的第一个元素
    unshift在数据开头插入一个元素
    reduce通过使用用户自定义函数,以字符串返回数组
    reverse数据倒序重排
    chunk数据分隔为多个数据块
    each给数据的每个元素执行回调
    filter用回调函数过滤数据中的元素
    column返回数据中的指定列
    sort对数据排序
    shuffle将数据打乱
    slice截取数据中的一部分