數據庫的查詢結果也就是數據集,默認的配置下,數據集的類型是一個二維數組,我們可以配置成數據集類,就可以支持對數據集更多的對象化操作,需要使用數據集類功能,可以配置數據庫的`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',
];
~~~
返回的數據集對象是`think\Collection`,提供了和數組無差別用法,并且另外封裝了一些額外的方法。
可以直接使用數組的方式操作數據集對象,例如:
~~~
// 獲取數據集
$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 | 截取數據中的一部分 |