## 数据库中间层改进
`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);
});
~~~