前言: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操做都略有差别,可是助手函数的执行效率相较这二者比较第一点,因此此处不考虑