## 數據庫中間層改進
`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);
});
~~~