牛骨文教育服务平台(让学习变的简单)

数据集

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

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

return [
    // 数据库类型
    "type"        => "mysql",
    // 数据库连接DSN配置
    "dsn"         => "",
    // 服务器地址
    "hostname"    => "127.0.0.1",
    // 数据库名
    "database"    => "thinkphp",
    // 数据库用户名
    "username"    => "root",
    // 数据库密码
    "password"    => "",
    // 数据库连接端口
    "hostport"    => "",
    // 数据库连接参数
    "params"      => [],
    // 数据库编码默认采用utf8
    "charset"     => "utf8",
    // 数据库表前缀
    "prefix"      => "think_",
    // 数据集返回类型
    "resultset_type" => "collection",
];

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

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

// 获取数据集
$users = Db::name("user")->select();
// 直接操作第一个元素
$item  = $users[0];
// 获取数据集记录数
$count = count($users);
// 遍历数据集
foreach($users as $user){
    echo $user["name"];
    echo $user["id"];
}

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

$users = Db::name("user")->select();
if($users->isEmpty()){
    echo "数据集为空";
}

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

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

如果只是个别数据的查询需要返回数据集对象,则可以使用

Db::name("user")
    ->fetchClass("	hinkCollection")
    ->select();