ThinkPHP5的数据操做和Thinkphp3.2.3对比小结

前言:php

因为Thinkphp5和Thinkphp3.2.3的版本差距过大,mysql

在记忆方面容易混淆。sql

故特地记录一下在数据操做上的对比的不一样。数据库

 


Tp3.2.3json

  增:add(),addAll()数组

  查:find(),select(),getField()函数

  改:save(),setField(),setInc(),setDec()spa

     注意;setInc,setDec,在TP5中被设定为助手函数可操做方法,Db类和模型都不能够    3d

   删:delete(主键),或者where()->delete()code

 


Tp5 DB类

  增:insert(),insertAll(),insertGetId()

  查:查的方法比较多

    一、返回一维关联数组的  Db::name(user)->find()

    二、返回二维关联数组的 Db::name(user)->select()

    三、返回某个字段字符串的 Db::name(user)->value("nickname")

    四、返回某个字段全部信息的 Db::name(user)->column("nickname")

    五、分批次查询的 chunk

      Db::name(user)->chunk(10,function($data){

        foreach($data as $key=>$vo){

        }

      })

  改:在Db类中,用的最多的仍是update($data)方法,固然还有其余的快捷方法

    一、不带where条件的update($data)

      当$data数组包含主键时,会自动以主键做为条件

1                  $data = ['id'=>4,'nickname'=>"jimmy",'email'=>"jimmy@qq.com"];
2                  echo Db::name("user")->update($data);   
3           //返回值为影响行数

    二、或者经过链式操做带上条件

1                  $data = ['nickname'=>"jeffny",'email'=>"jimmy@qq.com"];
2                  echo Db::name("user")->where("id=10")->update($data);        

    三、若是仅仅只更新某个字段,或者字段更新为自增、自减、使用mysql函数等状况时,还可使用setField,dec,inc,exp等形式

1              //修改单个字段
2              echo Db::name("user")->where("id=10")->setField("nickname",'lucy');        
3             //字段递增
4              echo Db::name("user")->where("id=10")->inc('status')->update(); 5 //字段递减 6 echo Db::name("user")->where("id=11")->dec('status')->update(); 7 //使用mysql函数 8 echo Db::name("user")->where("id=4")->exp('nickname','UPPER(nickname)')->update(); 9 

  删:delete

1             // 根据主键
2             echo Db::name("user")->delete(3);
3             //根据条件
4             echo Db::name("user")->where("nickname='JIMMY'")->delete();

 

      


Tp5 Model模型

  增:save(),saveAll()

  查:模型里面关于查询的操做须要注意

    一、根据主键进行查询某条记录的get(2)

      注意:模型返回的是对象类型,可是因为模型实现了ArrayAccess接口,因此能够像操做数组同样操做对象

1              $data = UserModel::get(4);
2              echo $data['nickname']; 3 echo $data['birthday']; 4 echo $data['email']; 5 dump($data);

 

     二、若是不是根据主键进行查询,则使用getByColumn,好比根据邮箱插叙,方法名为getByEmail

1              $data = UserModel::getByEmail("374398393@qq.com");
2              echo $data['nickname']; 3 echo $data['birthday']; 4 echo $data['email']; 5 dump($data);

     三、对get方法传递数组条件也能够的

1              $data = UserModel::get(['nickname'=>"沐霖"]);
2              
3              dump($data);

 

     四、可是注意 ,上面三种方法仅仅针对于获取一条记录,若是须要获取多条记录的话,须要使用方法all()

      该方法的返回值是数组,数组元素值则是对象(该对象等同于方法1的返回值),所以须要遍历数组才能取出数据

1              $data = UserModel::all();
2              foreach($data as $key=>$vo){ 3 echo $vo['id'].'---'.$vo['nickname'].'---'.$vo['email'].'<br/>'; 4  } 5 

  改:模型里面的修改,操做起来也是比较另类

    一、对查询的数据修改并保存

1              $data =UserModel::get(3);
2              $data->nickname='沐霖Sicada2'; 3 echo $data->save();

      喵喵喵??save()不是新增数据的方法么?!

      官网给出的解释以下:

    默认状况下,查询返回的模型实例若是执行save操做都是执行的数据库update(更新数据)操做,若是你须要实例化执行save执行数据库的insert(新增数据)操做,请确保在save方法以前调用isUpdate方法: 

   // 强制进行数据新增操做    $user->isUpdate(false)->save();

    二、还有一种更高效的方法,直接使用update方法,前提是数组中必须包含主键

               $user['id']       = 1;
               $user['nickname'] = '刘晨'; $user['email'] = 'liu21st@gmail.com'; echo UserModel::update($user); 

       若是数组不包含主键,则报错

             

       操做正确的返回值则为json字符串

    {"id":1,"nickname":"刘晨","email":"liu21st@gmail.com"}

   

  删:delete()和destroy()

    一、先查后删或者指定where条件

1             //先查后删
2             echo userModel::get(1)->delete();
3             //或者指定where条件
4             echo userModel::where("id=10")->delete();       

     二、根据主键直接删除

1             //根据主键destroy
2             echo userModel::destroy(11);

 

 


 

 

比较经常使用的几个差别性:

  一、Tp5中再也不支持_sql()函数的使用,必须选择  getLastSql()

     二、Tp5中Db类查询返回的是一维、二维数组,而模型中返回的则是,对象或者对象数组

  三、TP5号称对错误零容忍,对全部错误都是直接爆出,而不是像Tp3同样,调整数据或者不执行,因此在使用tp5的时候须要更严谨一些

  四、Tp5中的助手函数db()操做和Db类以及Model操做都略有差别,可是助手函数的执行效率相较这二者比较第一点,因此此处不考虑

相关文章
相关标签/搜索