🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 数据库中间层改进 `Db::connect()`方法返回`Query`对象(具体由`database.query`配置参数指定,留空则使用`think\db\Query`类)而不是`Connection`对象,原有数据库方法的查询用法不变,但会影响数据库驱动扩展的开发。 数据库查询事件的参数支持依赖注入。 支持在外部扩展查询类的方法,使用: ~~~ Query::extend('test',function($query,$name){ // 这里添加方法代码 // 第一个参数必须是查询对象 return $name; }); echo Db::test('thinkphp'); ~~~ 每次调用Db类的静态方法都是一次全新的查询, ~~~ Db::name('user')->where('id','>',0)->select(); Db::name('profile')->where('id','>',0)->select(); ~~~ 当前查询不会自动清空查询条件,可以继续进行多次查询,例如: ~~~ $query = Db::name('user'); $query->order('id','desc')->limit(5)->select(); $query->where('id','>',10)->select(); ~~~ 两次查询的SQL为: ~~~ SELECT * FROM `think_user` ORDER BY `id` desc LIMIT 5 SELECT * FROM `think_user` WHERE `id` > 10 ORDER BY `id` desc LIMIT 5 ~~~ 可以看出来,第二次查询会保留第一次查询的条件。 增加条件查询功能,例如: ~~~ Db::name('user')->when($condition,function($query){ // 满足条件后执行 $query->where('score','>',80); },function($query){ // 不满足条件执行 $query->where('score','>',60); }); ~~~