create就是一个处理数据的函数,处理提交上来的表单数据,完成高级模型的数据处理要求,返回处理好的数据.
create()方法用于创建数据对象,创建成功返回一个数组,失败返回一个false。因为在进行数据库操作(CRUD)之前,需要手动创建需要的数据
- create创建数据对象,并没有添加数据或者添加表,结果就是提交过来的键值对 - 创建完成后的数据可以直接读取或者修改利用$user->username - 保存在内存中,并没有实际写入到数据库中,直到使用add 或者save 方法才会真正写入数据库。 $user = M('User'); //--------直接create空,显示提交过来表单的数据,且默认为POST,接收get,create($_GET)但是create只获取数据库表与表单对应的信息,POST获取所有通过表中的字段名称与表单提交的名称对应关系自动封装数据实例
例如user表中有一个字段名叫"username",如果表单中有一个<input name="username" value="小明">,那么$User = M('User'); $data = $User->create(); echo $data['username'];就会输出"小明",不用你用$_POST['username']去接收
var_dump($user->create()); //--------数据覆盖 $data['username']='llicat'; $data['password']='123456'; var_dump($user->create($data)); //--------直接用_POST接收 $data['username']=$_POST['username']; $data['password']=$_POST['password']; $data['date']=date('Y-md H:i:s'); var_dump($user->create($data)); //--------手工获取数据,从对象创建新的数据对象 $data = new \stdClass(); $data->username = $_POST['username']; $data->password = $_POST['password']; $data->date = date('Y-md H:i:s'); var_dump($user->create($data)); //--------create俩个参数,第一个参数必须制定POST或者GET,第二个为操作,insert或者update //没指定第二个参数时,根据数据源是否包含主键判断修改或者新增,类似merge into var_dump($user->create($_GET)); var_dump($user->create($_POST, \Think\Model::MODEL_INSERT));
create()可以自动根据POST传递过来的数据创建数据对象,特别强调一下,必须得是POST方式传递过来的,其它方式不行
create()方法不只是创建数据对象,还完成了很多其它的工作,比如说令牌验证、自动映射、自动填充、自动验证等等!
//--------支持连贯操作field过滤、validate数据自动验证、auto数据自动完成、token令牌验证,与域有关 //限制字段 var_dump($user->field('username')->create());//只显示username //在模型中限制 $user = D('User'); var_dump($user->create());
如果只想简单的创建一个数据对象,即并不需要完成其它一些复杂的功能,可以是使用data()方法
- 使用data()方法创建数据对象是不会进行自动验证和自动过滤的,可以手动处理。但是在进行add()或save()操作的时候,数据表中不存在的字段以及非法的数据类型(例如对象、数组等非标量数据)是会自动过滤的
- 使用data()方法,是无法像create()那样自动根据$_POST来创建数据对象的,必须得手动将$_POST传入才行
//============数据写入===========
1.对create方法中创建的数据对象进行插入数据库。
$user = M('User'); $data['username']='heiheihei'; $data['password']='xixixi'; $user->add($data); //----------------------结合create $user = M("User"); //接收表单数据+创建的数据 $data = $user->create(); $data['date']=date('Y-m-d H:i:s'); $user->add($data); //----------------------连贯操作data,可以用于写入多个对象 $user->data($data)->add(); //或者可以用url格式 $data ='username=heiheihei&password=xixixi'; $user->data($data)->add();
2.可以进行数据中回调处理,类似于java中Spring框架的AOP思想,前提还是必须手动在Model文件夹中建立一个UserModel.class.php文件,在其中加入 // 插入数据前的回调方法 protected function _before_insert(&$data,$options) { } // 插入成功后的回调方法 protected function _after_insert($data,$options) { } 在插入之前做些什么在_before_insert中写自己的逻辑,在插入之后做些什么在_after_insert中写自己的逻辑。