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操做都略有差別,可是助手函數的執行效率相較這二者比較第一點,因此此處不考慮

相關文章
相關標籤/搜索