#創建數據
**create** 方法執行后會自動執行上面提到的自動驗證、自動映射操作,create方法執行成功后會創建模型數據。
> 執行模型的save 與 add 方法會自動執行create方法。
```
<?php namespace home\model;
use hdphp\model\Model;
class News extends Model{
protected $table = "news";
public function edit()
{
if($this->save())
{
return true;
}
}
}
```
以上代碼我們并沒有看到任何$_POST等變量,因為$_POST在 create 方法中進行了很多處理,所以最終給 save 操作的數據是很干凈和安全的。
##創建對象
create方法支持從其它方式創建數據對象,例如,從其它的數據對象,或者數組等
```
$data['name'] = 'hdphp';
$data['email'] = 'houdunwang@126.com';
User::create($data);
```
甚至還可以支持從對象創建新的數據對象
```
// 從obj數據對象創建新的User數據對象
$obj = new stdClass;
$obj->username = 'hdphp';
$obj->email = 'houdunwang@126.com';
User::create($obj);
```
創建完成的數據可以直接讀取和修改,例如:
```
$data['username'] = 'hdphp';
$data['email'] = 'houdunwang@126.com';
$db =User::create($data);
// 創建完成數據對象后可以直接讀取數據
echo $db->username;//或 $db['username']
// 也可以直接修改創建完成的數據
$db->username = '后盾網'; // 修改username字段數據
$db->qq = 2300071698; // 增加新的字段數據
```
##數據操作狀態
create方法的第二個參數可以指定創建數據的操作狀態,默認情況會根據數據中是否含有主鍵值自動判斷是寫入還是更新操作。
也可以顯式指定操作狀態,例如:
```
// 指定更新數據操作狀態,1 為插入 2 為更新
User::create($_POST,2);
```
系統內置的數據操作包括**Model::MODEL_INSERT**(或者1)和 **Model::MODEL_UPDATE(或者2)**,當沒有指定的時候,系統根據數據源是否包含主鍵數據來自動判斷,如果存在主鍵數據,就當成 **Model::MODEL_UPDATE** 操作。
不同的數據操作狀態可以定義不同的數據驗證和自動完成機制,所以,你可以自定義自己需要的數據操作狀態,例如,可以設置登錄操作的數據狀態(假設為2):
```
$Member = M("User");
// 指定更新數據操作狀態
$Member->create($_POST,2);
```
##設置數據
```
User::data(['username'=>'后盾','url'=>'houdunwang.com']);
```
##create動作流
事實上,create方法所做的工作遠非這么簡單,在創建數據對象的同時,完成了一系列的工作,我們來看下create方法的工作流程就能明白:
```
步驟 說明
1 獲取數據源(沒有傳遞數據時使用POST數組)
2 驗證數據源合法性(非數組或者對象會過濾)失敗則返回false
3 檢查字段映射
4 判斷數據狀態(新增或者編輯,指定或者自動判斷)
5 數據自動驗證,失敗則返回false
6 表單令牌驗證,失敗則返回false
7 表單數據賦值(過濾非法字段和字符串處理)
8 數據自動完成
9 生成數據對象(保存在內存)
```
- 基礎
- 框架特性
- 開發規范
- 許可協議
- 安裝
- 偽靜態
- 作者
- 更新日志
- 架構
- 入口文件
- 目錄結構
- 系統常量
- 自動加載
- 應用目錄
- 配置
- 設置配置
- 檢測配置
- 獲取配置
- 配置文件
- 擴展配置
- c 函數
- 函數
- 工具函數
- 控制器
- 定義
- 空方法
- 基本訪問
- 路由
- 基礎路由
- 控制器路由
- 路由參數
- 參數檢測
- 分組路由
- RESTful
- 數據庫
- 配置
- 核心操作
- 查詢構造器
- 表操作
- 事務處理
- 函數
- 查詢日志
- 模型
- 定義模型
- 模型動作
- 構建數據
- 模型驗證
- 自動完成
- 自動過濾
- 字段映射
- 表單令牌
- 字段保護
- 視圖模型
- 關聯模型
- 魔術方法
- 視圖
- 模板配置
- 模板文件
- 分配數據
- 請求響應
- 系統標簽
- 擴展標簽
- 緩存模板
- 模板繼承
- 中間件與鉤子
- 中間件
- 鉤子
- 緩存
- 基礎
- Mysql緩存
- 文件緩存
- 調試
- Trace
- 日志
- 調試模式
- 服務
- 介紹
- 創建服務
- 系統服務
- 自動完成
- 壓縮&解壓
- 自動驗證
- 上傳
- 字符串
- 響應
- 請求數據
- RBAC
- QQ整合登錄
- 分頁
- 郵件
- 語言
- 圖像
- 生成靜態
- 目錄操作
- 數據處理
- curl
- 加密
- Cookie
- 驗證碼
- 購物車
- 備份
- 數組
- 支付寶
- xml
- 工具
- 云接口
- 前端組件
- 基本配置
- 列表框日期選擇
- CSS 樣式
- URL操作
- 數據驗證
- 城市選擇
- JSON處理
- 幻燈片
- checkbox滑動樣式
- 消息框
- md5
- 模態框
- 上傳表單樣式
- 選擇字體
- 剪貼板
- 上傳圖片
- 上傳文件
- 拾色器 spectrum
- 列表框 select2
- 百度地圖
- 二維碼生成
- 表單提交
- 時間管理 moment
- 加載動畫
- 百度編輯器
- Cookie操作
- 圖標庫 font-awesome
- emotion表情
- domReady
- 日期 datetimepicker
- 日期區間列表 daterangepicker
- 日期區間 daterangepicker
- 時間 clockpicker
- 圖表
- 光標控制 caret
- 表單驗證 bootstrapValidator
- 微信
- 配置項
- 綁定開發者
- 獲取access_token
- 網頁授權獲取用戶基本信息
- 微信支付
- 微信紅包
- 用戶管理
- 二維碼
- 回復消息
- 消息管理
- 素材管理
- 會員組管理
- 事件管理
- 消息群發
- 客服
- 自定義菜單
- 菜單管理
- 菜單事件
- 附錄
- 升級環境
- HTTP 狀態碼
- GIT 命令