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