#创建数据
**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 命令