#模型动作
##介绍
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 命令