thinkphp5数据库操作总结

thinkphp5对数据库操作做了很多细致的封装,跟thinkphp3对比的话,在查询数据方面保留的最好,还支持where,order,find,select等基本的操作,但是getField等却不支持了。下面从数据增改删查方面进行总结:

1、增加数据:

去掉了add方法,用insertGetId代替了,即插入成功返回自增id(string类型),否则返回false。

Db::name('user')->insertGetId(['username' => 'admin']);

还可以使用insert,但成功返回1,失败返回false。此时要取得自增id,需要用getLastInsID()来获取,但注意获取到的是string类型。比如:

Db::name('user')->insert($data); $userId = Db::name('user')->getLastInsID();

2、修改数据,使用update代替了之前的save,用法是一样的,比如:

$lines = Db::name('test')->where(['id' => ['gt', 0]])->update($data);

返回的也是影响的行数。

如果在继承模型类Model,那么在模型类中,还可以像如下方式更新数据:

save方法,用法如下:

$user = new User;
// save方法第二个参数为更新条件
$user->save([
    'name'  => 'thinkphp',
    'email' => '[email protected]'
],['id' => 1]);

3、删除数据

跟之前一样的:

Db::table('think_user')->where('id',1)->delete();

可以使用助手函数:

// 根据主键删除
db('user')->delete(1);
// 条件删除    
db('user')->where('id',1)->delete();

如果在模型层,则有更多方式进行删除:

User::destroy(1);
// 支持批量删除多个数据
User::destroy('1,2,3');
// 或者
User::destroy([1,2,3]);
// 删除状态为0的数据
User::destroy(['status' => 0]);
User::destroy(function($query){
    $query->where('id','>',10);
});
User::where('id','>',10)->delete();

4、查询数据:

查询数据更tp3是几乎一样的,只是field方法改成了column,getField改成了value,这一点要注意。

从这些情况来看,thinkphp5把茴香豆有4种写法发挥到了新的高度,你可以只用其中一种,但是看代码的时候,要能理解各种方式都是在增删查改数据哦。

文档地址参考:http://www.kancloud.cn/manual/thinkphp5/135190

5、大数据处理,json数据查询:

这个是一个不错的新特性,参考:http://www.kancloud.cn/manual/thinkphp5/135176,不过要注意,json数据查询必须是mysql5.7.9及其高版本。见:https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#operator_json-column-path 

  6、 sql语句查询可以用bind:

Db::table('think_user')->where("id=:id and username=:name")->bind(['id'=>[1,\PDO::PARAM_INT],'name'=>'thinkphp'])->select();
 

另外注意一下助手函数并不是单例的:

注意:使用db助手函数默认每次都会重新连接数据库,而使用Db::name或者Db::table方法的话都是单例的。db函数如果需要采用相同的链接,可以传入第三个参数,例如:

db('user',[],false)->where('id',1)->find();
db('user',[],false)->where('status',1)->select();

上面的方式会使用同一个数据库连接,第二个参数为数据库的连接参数,留空表示采用数据库配置文件的配置。

猜你喜欢

转载自canlynet.iteye.com/blog/2363189