ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
#创建数据 **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 生成数据对象(保存在内存) ```