#模型動作
##介紹
HDPHP 實現了ActiveRecords模式的ORM模型,表映射到類,記錄映射到對象。最大的特點就是使用方便和便于理解(因為采用了對象化),提供了開發的最佳體驗,從而達到敏捷開發的目的。
如果數據庫表里有 updated_at 和 created_at 兩個字段,可以通過模型自動操作這兩個字段,只要將 $timestamps 屬性設為 true 即可。
##查詢
AR模式的數據查詢比較簡單,因為更多情況下面查詢條件都是以主鍵或者某個關鍵的字段。這種類型的查詢,HDPHP 有著很好的支持。 先舉個最簡單的例子,假如我們要查詢主鍵為8的某個用戶記錄,如果按照之前的方式,我們可能會使用下面的方法:
```
// 查找id為8的用戶數據,返回值為數組
User::where('uid',8)->find();
```
用AR模式的話可以直接寫成(返回值為模型對象):
```
User::find(5);
```
##新增
添加成功時,如果數據表有請主鍵則返回主鍵,否則返回true
```
// 然后直接給數據對象賦值
$User->name = 'hdphp';
$User->email = 'houdunwang@126.com';
// 把數據對象添加到數據庫
User::add();
```
**如果使用了create方法創建數據對象的話,仍然可以在創建完成后進行賦值**
```
$db=User::find(1);
$db->create(); // 創建User數據對象,默認使用 $_POST
// 增加或者更改其中的屬性
$User->nickname = 'php培訓';
$user->save();
```
##更新
**使用$_POST數據添加**
```
$User = new User;
//create 方法會執行自動驗證,如果沒有傳遞數據時使用$_POST數據
if($User->create())
{
$user->save();
}
```
**更新找到的數據**
要更新模型,可以取出它,更改屬性值,然后使用 save 方法:
```
$db = User::find(1); // 查找主鍵為1的數據
$db->username = 'hdphp'; // 修改數據對象
$db->save(); // 保存當前數據對象
```
上面這種方式僅僅是示例,不代表保存操作之前一定要先查詢。與下面的方式是等效的:
```
$User = new User;
$User->id = 1;
$User->username = 'hdphp'; // 修改數據對象
$User->save(); // 保存當前數據對象
```
**記錄不存在才新增**
```
$user =$User->firstOrCreate(['username' => '李四'],['username'=>'李四','age'=>22]);
//如果不存在叫 “李四” 的用戶就新增用戶
```
**指定更新數據**
數據中必須存在主鍵值
```
$User->save(array('id'=>1,'username'=>'houdunwang.com'));
```
**您可以結合查詢語句更新**
```
$user->where('id', '>', 100)->update(['cid' => 2]);
```
**更新模型的時間戳**
```
$user->touch();
//表中需要存在 updated_at 字段
```
> 使用save更新時,最好結合create方法
**獲取模型數據**
```
$user->getData();
```
##刪除
可以刪除當前查詢的數據對象
```
$User->find(2);
$User->delete(); // 刪除當前的數據對象
或者直接根據主鍵進行刪除
```
```
$User->delete(8); // 刪除主鍵為8的數據
$User->delete('5,6'); // 刪除主鍵為5、6的多個數據
```
## 模型錯誤
模型錯誤主要指模型運行中的錯誤信息,比如驗證錯誤或者開發者自行在模型中定義的錯誤。
```
$user->getError();
```
- 基礎
- 框架特性
- 開發規范
- 許可協議
- 安裝
- 偽靜態
- 作者
- 更新日志
- 架構
- 入口文件
- 目錄結構
- 系統常量
- 自動加載
- 應用目錄
- 配置
- 設置配置
- 檢測配置
- 獲取配置
- 配置文件
- 擴展配置
- 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 命令