前言:

由于Thinkphp5和Thinkphp3.2.3的版本差距过大,

在记忆方面容易混淆。

故特意记录一下在数据操作上的对比的不同。

 


Tp3.2.3

  增:add(),addAll()

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

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

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

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

 


Tp5 DB类

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

  查:查的方法比较多

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

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

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

    4、返回某个字段所有信息的 Db::name(user)->column("nickname")

    5、分批次查询的 chunk

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

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

        }

      })

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

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

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

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

    2、或者通过链式操作带上条件

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

    3、如果仅仅只更新某个字段,或者字段更新为自增、自减、使用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()

  查:模型里面关于查询的操作需要注意

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

      注意:模型返回的是对象类型,但是由于模型实现了ArrayAccess接口,所以可以像操作数组一样操作对象

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

 

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

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

     3、对get方法传递数组条件也可以的

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

 

     4、但是注意 ,上面三种方法仅仅针对于获取一条记录,如果需要获取多条记录的话,需要使用方法all()

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

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

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

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

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

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

      官网给出的解释如下:

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

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

    2、还有一种更高效的方法,直接使用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()

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

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

     2、根据主键直接删除

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

 

 


 

 

比较常用的几个差异性:

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

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

  3、TP5号称对错误零容忍,对所有错误都是直接爆出,而不是像Tp3一样,调整数据或者不执行,所以在使用tp5的时候需要更严谨一些

  4、Tp5中的助手函数db()操作和Db类以及Model操作都略有差异,但是助手函数的执行效率相较这两者比较第一点,所以此处不考虑

 

posted on 2017-12-10 12:47  沐霖Sicada  阅读(905)  评论(0编辑  收藏  举报