資料集(查詢建構器19)


資料庫的查詢結果也就是資料集,預設的情況下,資料集的類型是一個二維數組,但可以支援傳回資料集對象,使用fetchCollection方法:

// 获取数据集
$users = Db::name('user')->fetchCollection()->select();
// 遍历数据集
foreach($users as $user){
    echo $user['name'];
    echo $user['id'];
}

傳回的資料集物件是think\Collection,提供了和陣列無差別用法,並且另外封裝了一些額外的方法。

在模型中進行資料集查詢,全部傳回資料集對象,但使用的是think\model\Collection類別(繼承think\Collection),但用法是一致的。

可以直接使用陣列的方式操作資料集對象,例如:

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

fetchCollection方法也支援傳入使用的自訂集合類別名稱(必須繼承think\Collection)。

要注意的是,如果要判斷資料集是否為空,不能直接使用empty判斷,而必須使用資料集物件的isEmpty方法判斷,例如:

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

Collection類別包含了下列主要方法:

##whereLikeLike查詢篩選元素whereNotLikeNot Like過濾元素whereInIN查詢過濾陣列中的元素whereNotInNot IN查詢過濾數組中的元素whereBetweenBetween查詢過濾數組中的元素whereNotBetweenNot Between查詢過濾數組中的元素
方法描述
isEmpty是否為空
toArray轉換為陣列
all#所有資料
merge合併其它資料
#diff比較數組,傳回差集
flip交換資料中的鍵與值
#intersect比較數組,傳回交集
keys傳回資料中的所有鍵名
#pop刪除資料中的最後一個元素
shift刪除資料中的第一個元素
#unshift在資料開頭插入一個元素
push在結尾插入一個元素
#reduce透過使用使用者自訂函數,以字串傳回數組
reverse 資料倒序重排
chunk資料分隔為多個資料區塊
each給資料的每個元素執行回呼
filter用回呼函數過濾資料中的元素
column傳回資料中的指定列
sort對資料排序
order指定欄位排序
#shuffle將資料打亂
slice截取資料中的一部分
#map用回呼函數處理陣列中的元素
where根據欄位條件過濾陣列中的元素
##