请选择 进入手机版 | 继续访问电脑版

数字之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: 活动 交友 discuz
查看: 87|回复: 0

5.8数据集

[复制链接]
  • TA的每日心情
    开心
    2019-3-9 15:52
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    342

    主题

    344

    帖子

    1576

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    1576
    admin实名认证 发表于 2019-2-26 14:46:39 | 显示全部楼层 |阅读模式
    模型的单个数据查询,返回的都是模型对象实例,但查询多个数据的时候默认返回的是一个包含模型对象实例的数组。
    框架提供了一个Collection数据集对象来进行统一的模型的对象化操作,替代默认的数组数据集更好的封装自己的数据处理和业务逻辑。
    设置数据集对象后,查询多个数据的方法(包括Db类的select和模型类的all方法)返回的结果类型就会变成think\model\Collection对象实例。
    有两种方法可以设置,第一种方式是全局设置数据库的配置参数(默认设置为array):
    1. // 设置数据集返回类型'resultset_type'  => 'collection',
    复制代码
    该设置会影响所有的查询(包括Db类和模型类);
    第二种方式是在模型类添加属性设置
    1. // 设置模型的数据集返回类型protected $resultSetType = 'collection';
    复制代码
    该设置仅仅影响设置的模型中的查询结果,如果需要多个模型或者全部模型支持,可以使用继承,或者使用第一种数据库配置方式。

    数据集对象和普通的二维数组在使用上的最大区别就是数据是否为空的判断,二维数组的数据集判断为空直接使用:
    1. $resultSet = User::all();
    2. if (empty($resultSet)) {
    3.     echo '数据集为空';
    4. }
    复制代码
    如果使用数据集对象的话,需要改成:
    1. $resultSet = User::all();
    2. if ($resultSet->isEmpty()) {
    3.     echo '数据集为空';
    4. }
    复制代码
    通用的判断数据是否为空的方式可以用:
    1. $resultSet = User::all();
    2. if (0 == count($resultSet)) {
    3.     echo '数据集为空';
    4. }
    复制代码
    其它操作的区别就是一个是对象的方法操作,一个是数组函数的操作,下面是数据集对象的方法和数组函数的对应关系:
    QQ图片20190226144416.png
    可以自定义数据集的返回对象,然后在里面封装其它的方法。
    一般自定义的数据集对象建议继承think\model\Collection,然后在模型中设置resultSetType属性值为自定义查询类的类名。

    1. // 设置模型的数据集返回类型protected $resultSetType = 'app\common\Collection';
    复制代码
    总结下数据集的优势:
    数据更对象化;
    关联操作更方便;
    数据集本身可以单独定义独立的业务方法。

    maomivip@mail.com
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|寿光赢创志诚信息技术有限公司 ( 鲁ICP备19000917号 )

    GMT+8, 2019-3-25 23:55 , Processed in 0.060347 second(s), 24 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表