在ThinkPHP中数据对象的创建

在ThinkPHP中数据对象的创建

1、数据对象的创建

数据对象也就是父类模型中的$this -> data,在模型实例化的时候数据对象还是一个空数组,在后来使用了魔术方法__set来设置了数据对象的值。

既然data属性之前是空数组,后期使用的时候需要先给其赋值,也就说明,在使用数据对象的时候必须先创建数据对象。而__set是设置数据对象的一种方法;但是这种方式在使用的时候并不方便,原因是设置一个属性就得写一行代码;因此在ThinkPHP中系统还提供另外一种批量设置数据对象的方法:create方法。

语法:

$model -> create();

实现的底层代码:

     public function create($data='',$type='') {
        // 如果没有传值默认取POST数据
        if(empty($data)) {
            $data   =   I('post.');
        }elseif(is_object($data)){
            $data   =   get_object_vars($data);
        }
        // 验证数据
        if(empty($data) || !is_array($data)) {
            $this->error = L('_DATA_TYPE_INVALID_');
            return false;
        }

通过它的实现代码,可以发现如果不给create方法传递参数,则其默认使用post中的数据。

 

        public function add(){
          if(IS_POST){
            //处理表单提交
            //$post = I('post.');
            //添加数据
            //实例化模型
            $model = M('Dept');
            $model -> create();
            $result = $model -> add();
            //判断返回值
            if($result){
              //添加成功
              $this -> success('添加成功',U('showList'),5);
            }else{
              $this -> error('添加失败');
            }
          }else{
          //实例化模型
          $model = M('Dept');
          //查询操作
          $data = $model -> where('pid = 0') -> select();
          //变量分配
          $this -> assign('data',$data);
          //展示模板
          $this -> display();
        }
}

关于是否接收数据对象创建方法返回值说明:

如果想使用打印方法去查看数据是否正确则可以接收返回值,如果不想打印,则可以不接收,则在使用CURD操作的时候也不需要给具体的操作方法传递参数。如果在使用自动验证的时候,则必须要接收返回值

猜你喜欢

转载自blog.csdn.net/qq_41630218/article/details/81119744