高級查詢
快捷查詢
快捷查詢方式是一種多(duo)字段相同(tong)查詢條(tiao)件的簡化寫法,可以進一步簡化查詢條件的寫法,在多個字段之間用|分割表示OR查詢,用&分割(ge)表示AND查(cha)詢(xun),可以(yi)實(shi)現下面(mian)的查(cha)詢(xun),例如:
Db::table('think_user')
->where('name|title','like','thinkphp%')
->where('create_time&update_time','>',0)
->find();
生成的查詢SQL是:
SELECT * FROM `think_user` WHERE ( `name` LIKE 'thinkphp%' OR `title` LIKE 'thinkphp%' ) AND ( `create_time` > 0 AND `update_time` > 0 ) LIMIT 1
快(kuai)捷查詢支持(chi)所(suo)有的查詢表達(da)式。
區間查詢
區間查詢是一種同一字段多個(ge)查詢條(tiao)件的簡化寫法,例如:
Db::table('think_user')
->where('name',['like','thinkphp%'],['like','%thinkphp'])
->where('id',['>',0],['<>',10],'or')
->find();
生成的SQL語句為(wei):
SELECT * FROM `think_user` WHERE ( `name` LIKE 'thinkphp%' AND `name` LIKE '%thinkphp' ) AND ( `id` > 0 OR `id` <> 10 ) LIMIT 1
區(qu)間查(cha)詢的(de)查(cha)詢條件必須使(shi)用(yong)數組(zu)定(ding)義方式,支(zhi)持所有(you)的(de)查(cha)詢表達式。
下(xia)面的查詢方式是錯誤的:
Db::table('think_user')
->where('name',['like','thinkphp%'],['like','%thinkphp'])
->where('id',5,['<>',10],'or')
->find();
批量查詢
可以進(jin)行(xing)多個條(tiao)件的批量條(tiao)件查(cha)詢定義,例(li)如:
Db::table('think_user')
->where([
'name' => ['like','thinkphp%'],
'title' => ['like','%thinkphp'],
'id' => ['>',0],
'status'=> 1
])
->select();
生(sheng)成的SQL語句(ju)為(wei):
SELECT * FROM `think_user` WHERE `name` LIKE 'thinkphp%' AND `title` LIKE '%thinkphp' AND `id` > 0 AND `status` = '1'
閉包查詢
Db::table('think_user')->select(function($query){
$query->where('name','thinkphp')
->whereOr('id','>',10);
});
生成的SQL語句為(wei):
SELECT * FROM `think_user` WHERE `name` = 'thinkphp' OR `id` > 10
使用Query對象查詢
也可(ke)以事先封裝(zhuang)Query對象,并(bing)傳(chuan)入select方法(fa),例如:
$query = new \think\db\Query;
$query->name('user')
->where('name','like','%think%')
->where('id','>',10)
->limit(10);
Db::select($query);
如果使用
Query對象的話,select方法之前調用的任何的鏈式操作都是(shi)無效。
混合查詢
可以結合前面提到的(de)所(suo)有(you)方式進(jin)行混合查詢(xun),例如:
Db::table('think_user')
->where('name',['like','thinkphp%'],['like','%thinkphp'])
->where(function($query){
$query->where('id',['<',10],['>',100],'or');
})
->select();
生成的(de)SQL語(yu)句(ju)是(shi):
SELECT * FROM `think_user` WHERE ( `name` LIKE 'thinkphp%' AND `name` LIKE '%thinkphp' ) AND ( `id` < 10 or `id` > 100 )
字符串條件查詢
對(dui)于一些(xie)實(shi)在復雜(za)的查詢(xun),也可以直接使用原生SQL語句進行查詢(xun),例如:
Db::table('think_user')
->where('id > 0 AND name LIKE "thinkphp%"')
->select();
為了安全起見,我們可以對字符(fu)串查詢條件使(shi)用參(can)數綁定(ding),例如(ru):
Db::table('think_user')
->where('id > :id AND name LIKE :name ',['id'=>0, 'name'=>'thinkphp%'])
->select();
V5.0.4+開始,ThinkPHP支持對同一個字(zi)段多次調(diao)用查詢(xun)條件(jian),例(li)如:
Db::table('think_user')
->where('name','like','%think%')
->where('name','like','%php%')
->where('id','in',[1,5,80,50])
->where('id','>',10)
->find();
快捷方法(V5.0.5+)
V5.0.5+版本(ben)開始新增了一系列(lie)快(kuai)捷方法(fa),用于簡化查(cha)詢,包括:
| 方法 | 作用 |
|---|---|
whereNull |
查詢字段是否為Null |
whereNotNull |
查詢字段是否不為Null |
whereIn |
字段IN查詢 |
whereNotIn |
字段NOT IN查詢 |
whereBetween |
字段BETWEEN查詢 |
whereNotBetween |
字段NOT BETWEEN查詢 |
whereLike |
字段LIKE查詢 |
whereNotLike |
字段NOT LIKE查詢 |
whereExists |
EXISTS條件查詢 |
whereNotExists |
NOT EXISTS條件查詢 |
whereExp |
表達式查詢 |
