## 大數據節省內存處理
### 將查詢數據對象轉成數組
在Laravel框架中,我們可以在使用連貫查詢的時候使用`toArray()`方法將查詢的數據對象轉換成數組,方便使用。
那么在Yii2中,我們可以使用`asArray()`得到同樣的效果。當然,如果查詢的數據量比較大的話這樣做能節省服務器內存,如:
```php
$article = Article::find()->asArray()->all();
```
### 批量操作數據
#### 批量讀取數據
例如一次性取100條,我們分十次取一次取10條。使用`betch()`進行操作,如下:
```php
foreach(Article::find()->betch(10) as $article)
{
print_r(count($article));
}
```
#### 批量寫入數據
下面是一個將excel數據導入到數據庫的例子,使用`batchInsert()`方法進行數據的寫入,提高效率。
```php
/**
* 導入Excel操作
*/
public function actionImportExcel()
{
$inputFile = 'uploads/branches_file.xlsx';
try {
$inputFileType = PHPExcel_IOFactory::identify($inputFile);
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objPHPExcel = $objReader->load($inputFile);
} catch (Exception $e) {
dir('Error');
}
$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow();
$highestColumn = $sheet->getHighestColumn();
for ($row = 1; $row <= $highestRow; $row++) {
$rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, null, true, false);
if ($row == 1) {
continue;
}
/*$branch = new Branches;
$branch->branch_id = $rowData[0][0];
$branch->companies_company_id = $rowData[0][1];
$branch->branch_name = $rowData[0][2];
$branch->branch_address = $rowData[0][3];
$branch->branch_created_date = $rowData[0][4];
$branch->branch_status = $rowData[0][5];
$branch->save();*/
if(!empty($rowData[0][0])){
$data[] = [$rowData[0][0],$rowData[0][1],$rowData[0][2],$rowData[0][3],$rowData[0][4],$rowData[0][5]];
}
}
Yii::$app->db->createCommand()
->batchInsert('branches', ['branch_id','companies_company_id','branch_name','branch_address','branch_created_date','branch_status'], $data)
->execute();
die('okay');
}
```
- 開始
- Yii2開發小技巧
- Yii2使用不同的方式進行郵件發送邏輯處理
- Yii2 Serialization of 'Closure' is not allowed 錯誤
- Yii創建應用
- Yii應用結構和流程
- Yii的路徑別名
- Yii的請求
- Yii的響應
- Sessions 和 Cookies
- Yii自定義全局工具函數
- Yii2模型
- Yii2視圖
- Yii2控制器
- 大數據節省內存處理
- 關聯查詢hasMany、hasOne
- Yii2 URL地址美化
- Yii2整合AdminLTE后臺主題
- Yii2模型中的場景
- Yii2中的RBAC
- Yii2項目后臺整合yii2-admin模塊
- RBAC集成AdminLTE后臺主題對菜單進行控制
- Yii2自定義Gii模板
- 修復AdminLTE引用外部字體文件導致訪問變慢的情況
- Yii2事件簡單使用
- Yii2模型事件
- Yii2使用GridView新增操作按鈕
- Yii2向loyout模板文件中傳值
- Yii2數據緩存
- Yii2緩存
- Yii2數據緩存之增刪改查
- Yii2拓展
- Yii2日期時間插件-datetimepicker
- kartik-v/yii2-widget-fileinput上傳插件