模型通常要匯出成不同格式,例如,你可能想將模型的乙個集合轉成json或excel格式, 匯出過程可分解為兩個步驟:
你只需要關注第一步,因為第二步可被通用的 資料轉換器如yii\web\jsonresponseformatter來完成。
將模型轉換為陣列最簡單的方式是使用 yii\base\model::attributes() 屬性, 例如:
$array = $post->attributes;
yii\base\model::attributes() 屬性會返回 model裡所有 申明的屬性的值(model表對應的所有字段)。
更靈活和強大的將模型轉換為陣列的方式是使用yii\\base\\model::toarray()
方法, 它的行為預設和yii\\base\\model::attributes()
相同, 但是它允許你選擇哪些稱之為_欄位_的資料項放入到結果陣列中並同時被格式化。 實際上,它是匯出模型到 restful 網頁服務開發的預設方法, 詳情請參閱響應格式.
欄位是模型通過呼叫yii\\base\\model::toarray()
生成的陣列的單元名。
預設情況下,欄位名對應屬性名,但是你可以通過覆蓋fields()
和extrafields()
方法來改變這種行為, 兩個方法都返回乙個字段定義列表,fields()
方法定義的字段是預設字段, 表示toarray()
方法缺省會返回這些字段。extrafields()
方法定義額外可用字段, 通過toarray()
方法指定$expand
引數來返回這些額外可用字段。 例如如下**會返回fields()
方法定義的所有欄位和extrafields()
方法定義的prettyname
andfulladdress
字段。
$array = $model->toarray(, ['prettyname', 'fulladdress']);
可通過覆蓋fields()
來增加、刪除、重新命名和重定義字段,fields()
方法返回值應為陣列, 陣列的鍵為欄位名,陣列的值為對應的可為屬性名或匿名函式返回的字段定義對應的值。 特使情況下,如果欄位名和屬性定義名相同,可以省略陣列鍵, 例如:
// 明確列出每個字段,特別用於你想確保資料表或模型
// 屬性改變不會導致你的字段改變(保證後端的api相容)。
public function fields()
, ];
}// 過濾掉一些字段,特別用於
// 你想繼承父類實現並不想用一些敏感字段
public function fields()
**警告: **由於模型的所有屬性會被包含在匯出陣列,最好檢查資料確保沒包含敏感資料, 如果有敏感資料,應覆蓋fields()
方法過濾掉, 在上述列子中,我們選擇過濾掉auth_key
,password_hash
andpassword_reset_token
。
### 控制器
$model = vbbtask::findone(1380);
$model->toarray(, ['project_id']);
### model重寫 fields, extrafields
public function fields()
, 'nickname' => function() ,
} else
public function extrafields()
需要對返回的欄位名,或者返回值做二次處理,就可以用以上的方法
List的toArray方法強制轉換
list容器類中有乙個toarray 的方法,該方法是用來把list轉化為陣列的。這個方法有乙個特點就是轉化出來的陣列是複製了原資料的乙個副本而不只是原資料的乙個引用。因此我們可以放心的更改這些資料而不會影響到原list中的資料。當我們用toarray 方法時涉及到資料型別轉換的問題,首先需要確保l...
List的toArray方法強制轉換
list容器類中有乙個toarray 的方法,該方法是用來把list轉化為陣列的。這個方法有乙個特點就是轉化出來的陣列是複製了原資料的乙個副本而不只是原資料的乙個引用。因此我們可以放心的更改這些資料而不會影響到原list中的資料。當我們用toarray 方法時涉及到資料型別轉換的問題,首先需要確保l...
資料匯出Excel表 資料庫資料匯出
public static hashmapcolumn new hashmap static param table 要匯出的表 param name 匯出的excel表名稱 表頭 throws exception public void createexcel string table,strin...