最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

tp5.1 框架數(shù)據(jù)庫(kù)高級(jí)查詢(xún)技巧實(shí)例總結(jié)

 更新時(shí)間:2020年05月25日 11:32:30   作者:人生如初見(jiàn)_張默  
這篇文章主要介紹了tp5.1 框架數(shù)據(jù)庫(kù)高級(jí)查詢(xún)技巧,結(jié)合實(shí)例形式總結(jié)分析了tp5.1 框架數(shù)據(jù)庫(kù)快捷查詢(xún)、區(qū)間查詢(xún)、批量查詢(xún)、閉包查詢(xún)等相關(guān)高級(jí)查詢(xún)使用技巧,需要的朋友可以參考下

本文實(shí)例講述了tp5.1 框架數(shù)據(jù)庫(kù)高級(jí)查詢(xún)技巧。分享給大家供大家參考,具體如下:

快捷查詢(xún)

快捷查詢(xún)方式是一種多字段相同查詢(xún)條件的簡(jiǎn)化寫(xiě)法,可以進(jìn)一步簡(jiǎn)化查詢(xún)條件的寫(xiě)法,在多個(gè)字段之間用|分割表示OR查詢(xún),用&分割表示AND查詢(xún),可以實(shí)現(xiàn)下面的查詢(xún),例如:

Db::table('think_user')
 ->where('name|title','like','thinkphp%')
 ->where('create_time&update_time','>',0)
 ->find();

生成的查詢(xún)SQL是:

SELECT * FROM 
 `think_user` 
WHERE ( 
 `name` LIKE 'thinkphp%' OR `title` LIKE 'thinkphp%' ) 
AND ( 
 `create_time` > 0 AND `update_time` > 0 ) 
LIMIT 1

快捷查詢(xún)支持所有的查詢(xún)表達(dá)式。

區(qū)間查詢(xún)

區(qū)間查詢(xún)是一種同一字段多個(gè)查詢(xún)條件的簡(jiǎn)化寫(xiě)法,例如:

Db::table('think_user')
 ->where('name', ['like', '%thinkphp%'], ['like', '%kancloud%'], 'or')
 ->where('id', ['>', 0], ['<>', 10], 'and')
 ->find();

生成的SQL語(yǔ)句為:

SELECT * FROM 
 `think_user` 
WHERE ( 
 `name` LIKE '%thinkphp%' OR `name` LIKE '%kancloud%' ) 
AND ( 
 `id` > 0 AND `id` <> 10 )
LIMIT 1

區(qū)間查詢(xún)的查詢(xún)條件必須使用數(shù)組定義方式,支持所有的查詢(xún)表達(dá)式。

下面的查詢(xún)方式是錯(cuò)誤的:

Db::table('think_user')
 ->where('name', ['like', 'thinkphp%'], ['like', '%thinkphp'])
 ->where('id', 5, ['<>', 10], 'or')
 ->find();

區(qū)間查詢(xún)其實(shí)可以用下面的方式替代,更容易理解,因?yàn)椴樵?xún)構(gòu)造器支持對(duì)同一個(gè)字段多次調(diào)用查詢(xún)條件,例如:

Db::table('think_user')
 ->where('name', 'like', '%think%')
 ->where('name', 'like', '%php%')
 ->where('id', 'in', [1, 5, 80, 50])
 ->where('id', '>', 10)
 ->find();

批量(字段)查詢(xún)

可以進(jìn)行多個(gè)條件的批量條件查詢(xún)定義,例如:

Db::table('think_user')
 ->where([
 ['name', 'like', 'thinkphp%'],
 ['title', 'like', '%thinkphp'],
 ['id', '>', 0],
 ['status', '=', 1],
 ])
 ->select();

生成的SQL語(yǔ)句為:

SELECT * FROM 
 `think_user` 
WHERE 
 `name` LIKE 'thinkphp%' 
AND 
 `title` LIKE '%thinkphp' 
AND 
 `id` > 0 
AND 
 `status` = '1'

注意,V5.1.7+版本數(shù)組方式如果使用exp查詢(xún)的話,一定要用raw方法。

Db::table('think_user')
 ->where([
 ['name', 'like', 'thinkphp%'],
 ['title', 'like', '%thinkphp'],
 ['id', 'exp', Db::raw('>score')],
 ['status', '=', 1],
 ])
 ->select();

數(shù)組查詢(xún)方式,確保你的查詢(xún)數(shù)組不能被用戶(hù)提交數(shù)據(jù)控制,用戶(hù)提交的表單數(shù)據(jù)應(yīng)該是作為查詢(xún)數(shù)組的一個(gè)元素傳入,如下:

Db::table('think_user')
 ->where([
 ['name', 'like', $name . '%'],
 ['title', 'like', '%' . $title],
 ['id', '>', $id],
 ['status', '=', $status],
 ])
 ->select();

注意,相同的字段的多次查詢(xún)條件可能會(huì)合并,如果希望某一個(gè)where方法里面的條件單獨(dú)處理,可以使用下面的方式,避免被其它條件影響。

$map = [
 ['name', 'like', 'thinkphp%'],
 ['title', 'like', '%thinkphp'],
 ['id', '>', 0],
 ];
Db::table('think_user')
 ->where([ $map ])
 ->where('status',1)
 ->select();

生成的SQL語(yǔ)句為:

SELECT * FROM 
 `think_user` 
WHERE ( 
 `name` LIKE 'thinkphp%' 
AND 
 `title` LIKE '%thinkphp' 
AND 
 `id` > 0 ) 
AND 
 `status` = '1'

如果使用下面的多個(gè)條件組合

$map1 = [
 ['name', 'like', 'thinkphp%'],
 ['title', 'like', '%thinkphp'],
 ];
 
$map2 = [
 ['name', 'like', 'kancloud%'],
 ['title', 'like', '%kancloud'],
 ]; 
 
Db::table('think_user')
 ->whereOr([ $map1, $map2 ])
 ->select();

生成的SQL語(yǔ)句為:

SELECT * FROM 
 `think_user` 
WHERE ( 
 `name` LIKE 'thinkphp%' 
AND 
 `title` LIKE '%thinkphp' ) 
OR ( 
 `name` LIKE 'kancloud%' 
AND 
 `title` LIKE '%kancloud' )

善用多維數(shù)組查詢(xún),可以很方便的拼裝出各種復(fù)雜的SQL語(yǔ)句

數(shù)組對(duì)象查詢(xún)(V5.1.21+)

對(duì)于習(xí)慣或者重度依賴(lài)數(shù)組查詢(xún)條件的用戶(hù)來(lái)說(shuō),可以選擇數(shù)組對(duì)象查詢(xún),該對(duì)象完成了普通數(shù)組方式查詢(xún)和系統(tǒng)的查詢(xún)表達(dá)式之間的橋接,但相較于系統(tǒng)推薦的查詢(xún)表達(dá)式方式而言,需要注意變量的安全性,避免產(chǎn)生SQL注入的情況。

使用方法如下:

use think\db\Where;
 
$map = [
 'name' => ['like', 'thinkphp%'],
 'title' => ['like', '%think%'],
 'id' => ['>', 10],
 'status' => 1,
];
 
$where  = new Where;
$where['id'] = ['in', [1, 2, 3]];
$where['title'] = ['like', '%php%'];
 
Db::table('think_user')
 ->where(new Where($map))
 ->whereOr($where->enclose())
 ->select();

enclose方法表示該查詢(xún)條件兩邊會(huì)加上括號(hào)包起來(lái)。

使用數(shù)組對(duì)象查詢(xún)的情況請(qǐng)一定要注意做好數(shù)據(jù)類(lèi)型檢查,盡量避免讓用戶(hù)決定你的數(shù)據(jù)。

生成的SQL是:

SELECT * FROM 
 `think_user` 
WHERE 
 `name` LIKE 'thinkphp%' 
AND 
 `title` LIKE '%think%' 
AND 
 `id` > 10 
AND 
 `status` =1 
OR ( 
 `id` IN (1,2,3) 
AND 
 `title` LIKE '%php%' )

閉包查詢(xún)

$name = 'thinkphp';
$id = 10;
Db::table('think_user')->where(function ($query) use($name, $id) {
 $query->where('name', $name)
 ->whereOr('id', '>', $id);
})->select();

生成的SQL語(yǔ)句為:

SELECT * FROM `think_user` WHERE ( `name` = 'thinkphp' OR `id` > 10 )

可見(jiàn)每個(gè)閉包條件兩邊也會(huì)自動(dòng)加上括號(hào),但需要注意,使用閉包查詢(xún)的時(shí)候不能使用cache(true)數(shù)據(jù)緩存,而應(yīng)該使用指定key的方式例如cache('key')

混合查詢(xún)

可以結(jié)合前面提到的所有方式進(jìn)行混合查詢(xún),例如:

Db::table('think_user')
 ->where('name', ['like', 'thinkphp%'], ['like', '%thinkphp'])
 ->where(function ($query) {
 $query->where('id', ['<', 10], ['>', 100], 'or');
 })
 ->select();

生成的SQL語(yǔ)句是:

SELECT * FROM 
 `think_user` 
WHERE ( 
 `name` LIKE 'thinkphp%' 
AND 
 `name` LIKE '%thinkphp' ) 
AND ( 
 `id` < 10 or `id` > 100 )

字符串條件查詢(xún)

對(duì)于一些實(shí)在復(fù)雜的查詢(xún),也可以直接使用原生SQL語(yǔ)句進(jìn)行查詢(xún),例如:

Db::table('think_user')
 ->where('id > 0 AND name LIKE "thinkphp%"')
 ->select();

為了安全起見(jiàn),我們可以對(duì)字符串查詢(xún)條件使用參數(shù)綁定,例如:

Db::table('think_user')
 ->where('id > :id AND name LIKE :name ', ['id' => 0, 'name' => 'thinkphp%'])
 ->select();

V5.1.8+版本開(kāi)始,如果你要使用字符串條件查詢(xún),推薦使用whereRaw方法。

Db::table('think_user')
 ->whereRaw('id > :id AND name LIKE :name ', ['id' => 0, 'name' => 'thinkphp%'])
 ->select();

使用Query對(duì)象查詢(xún)(V5.1.5+)

V5.1.5+版本開(kāi)始,可以通過(guò)調(diào)用一次where方法傳入Query對(duì)象來(lái)進(jìn)行查詢(xún)。

$query = new \think\db\Query;
$query->where('id','>',0)
	->where('name','like','%thinkphp');
 
Db::table('think_user')
 ->where($query)
 ->select();

Query對(duì)象的where方法僅能調(diào)用一次,如果query對(duì)象里面使用了非查詢(xún)條件的鏈?zhǔn)椒椒?,則不會(huì)傳入當(dāng)前查詢(xún)。

$query = new \think\db\Query;
$query->where('id','>',0)
	->where('name','like','%thinkphp')
 ->order('id','desc') // 不會(huì)傳入后面的查詢(xún)
 ->field('name,id'); // 不會(huì)傳入后面的查詢(xún)
 
Db::table('think_user')
 ->where($query)
 ->where('title','like','thinkphp%') // 有效
 ->select();

快捷方法

系統(tǒng)封裝了一系列快捷方法,用于簡(jiǎn)化查詢(xún),包括:

方法 作用
whereOr 字段OR查詢(xún)
whereXor 字段XOR查詢(xún)
whereNull 查詢(xún)字段是否為Null
whereNotNull 查詢(xún)字段是否不為Null
whereIn 字段IN查詢(xún)
whereNotIn 字段NOT IN查詢(xún)
whereBetween 字段BETWEEN查詢(xún)
whereNotBetween 字段NOT BETWEEN查詢(xún)
whereLike 字段LIKE查詢(xún)
whereNotLike 字段NOT LIKE查詢(xún)
whereExists EXISTS條件查詢(xún)
whereNotExists NOT EXISTS條件查詢(xún)
whereExp 表達(dá)式查詢(xún)
whereColumn 比較兩個(gè)字段

下面舉例說(shuō)明下兩個(gè)字段比較的查詢(xún)條件whereColumn方法的用法。

查詢(xún)update_time大于create_time的用戶(hù)數(shù)據(jù)

Db::table('think_user')
 ->whereColumn('update_time','>','create_time')
 ->select();

生成的SQL語(yǔ)句是:

SELECT * FROM `think_user` WHERE ( `update_time` > `create_time` ) 

查詢(xún)namenickname相同的用戶(hù)數(shù)據(jù)

Db::table('think_user')
 ->whereColumn('name','=','nickname')
 ->select();

生成的SQL語(yǔ)句是:

SELECT * FROM `think_user` WHERE ( `name` = `nickname` )

相同字段條件也可以簡(jiǎn)化為

Db::table('think_user')
 ->whereColumn('name','nickname')
 ->select();

高級(jí)查詢(xún)

快捷查詢(xún)

快捷查詢(xún)方式是一種多字段相同查詢(xún)條件的簡(jiǎn)化寫(xiě)法,可以進(jìn)一步簡(jiǎn)化查詢(xún)條件的寫(xiě)法,在多個(gè)字段之間用|分割表示OR查詢(xún),用&分割表示AND查詢(xún),可以實(shí)現(xiàn)下面的查詢(xún),例如:

Db::table('think_user')
 ->where('name|title','like','thinkphp%')
 ->where('create_time&update_time','>',0)
 ->find();

生成的查詢(xún)SQL是:

SELECT * FROM `think_user` 
WHERE ( `name` LIKE 'thinkphp%' OR `title` LIKE 'thinkphp%' ) 
AND ( `create_time` > 0 AND `update_time` > 0 ) 
LIMIT 1

快捷查詢(xún)支持所有的查詢(xún)表達(dá)式。

區(qū)間查詢(xún)

區(qū)間查詢(xún)是一種同一字段多個(gè)查詢(xún)條件的簡(jiǎn)化寫(xiě)法,例如:

Db::table('think_user')
 ->where('name', ['like', '%thinkphp%'], ['like', '%kancloud%'], 'or')
 ->where('id', ['>', 0], ['<>', 10], 'and')
 ->find();

生成的SQL語(yǔ)句為:

SELECT * FROM `think_user` 
WHERE ( `name` LIKE '%thinkphp%' OR `name` LIKE '%kancloud%' ) 
AND ( `id` > 0 AND `id` <> 10 ) 
LIMIT 1

區(qū)間查詢(xún)的查詢(xún)條件必須使用數(shù)組定義方式,支持所有的查詢(xún)表達(dá)式。

下面的查詢(xún)方式是錯(cuò)誤的:

Db::table('think_user')
 ->where('name', ['like', 'thinkphp%'], ['like', '%thinkphp'])
 ->where('id', 5, ['<>', 10], 'or')
 ->find();

區(qū)間查詢(xún)其實(shí)可以用下面的方式替代,更容易理解,因?yàn)椴樵?xún)構(gòu)造器支持對(duì)同一個(gè)字段多次調(diào)用查詢(xún)條件,例如:

Db::table('think_user')
 ->where('name', 'like', '%think%')
 ->where('name', 'like', '%php%')
 ->where('id', 'in', [1, 5, 80, 50])
 ->where('id', '>', 10)
 ->find();

批量(字段)查詢(xún)

可以進(jìn)行多個(gè)條件的批量條件查詢(xún)定義,例如:

Db::table('think_user')
 ->where([
 ['name', 'like', 'thinkphp%'],
 ['title', 'like', '%thinkphp'],
 ['id', '>', 0],
 ['status', '=', 1],
 ])
 ->select();

生成的SQL語(yǔ)句為:

SELECT * FROM `think_user` 
WHERE `name` LIKE 'thinkphp%' 
AND `title` LIKE '%thinkphp' 
AND `id` > 0 
AND `status` = '1'

注意,V5.1.7+版本數(shù)組方式如果使用exp查詢(xún)的話,一定要用raw方法。

Db::table('think_user')
 ->where([
 ['name', 'like', 'thinkphp%'],
 ['title', 'like', '%thinkphp'],
 ['id', 'exp', Db::raw('>score')],
 ['status', '=', 1],
 ])
 ->select();

數(shù)組查詢(xún)方式,確保你的查詢(xún)數(shù)組不能被用戶(hù)提交數(shù)據(jù)控制,用戶(hù)提交的表單數(shù)據(jù)應(yīng)該是作為查詢(xún)數(shù)組的一個(gè)元素傳入,如下:

Db::table('think_user')
 ->where([
 ['name', 'like', $name . '%'],
 ['title', 'like', '%' . $title],
 ['id', '>', $id],
 ['status', '=', $status],
 ])
 ->select();

注意,相同的字段的多次查詢(xún)條件可能會(huì)合并,如果希望某一個(gè)where方法里面的條件單獨(dú)處理,可以使用下面的方式,避免被其它條件影響。

$map = [
 ['name', 'like', 'thinkphp%'],
 ['title', 'like', '%thinkphp'],
 ['id', '>', 0],
 ];
Db::table('think_user')
 ->where([ $map ])
 ->where('status',1)
 ->select();

生成的SQL語(yǔ)句為:

SELECT * FROM `think_user` 
WHERE ( `name` LIKE 'thinkphp%' AND `title` LIKE '%thinkphp' AND `id` > 0 ) 
AND `status` = '1'

如果使用下面的多個(gè)條件組合

$map1 = [
 ['name', 'like', 'thinkphp%'],
 ['title', 'like', '%thinkphp'],
 ];
 
$map2 = [
 ['name', 'like', 'kancloud%'],
 ['title', 'like', '%kancloud'],
 ]; 
 
Db::table('think_user')
 ->whereOr([ $map1, $map2 ])
 ->select();

生成的SQL語(yǔ)句為:

SELECT * FROM `think_user` 
WHERE ( `name` LIKE 'thinkphp%' AND `title` LIKE '%thinkphp' ) 
OR ( `name` LIKE 'kancloud%' AND `title` LIKE '%kancloud' )

善用多維數(shù)組查詢(xún),可以很方便的拼裝出各種復(fù)雜的SQL語(yǔ)句

數(shù)組對(duì)象查詢(xún)(V5.1.21+)

對(duì)于習(xí)慣或者重度依賴(lài)數(shù)組查詢(xún)條件的用戶(hù)來(lái)說(shuō),可以選擇數(shù)組對(duì)象查詢(xún),該對(duì)象完成了普通數(shù)組方式查詢(xún)和系統(tǒng)的查詢(xún)表達(dá)式之間的橋接,但相較于系統(tǒng)推薦的查詢(xún)表達(dá)式方方式而言,需要注意變量的安全性,避免產(chǎn)生SQL注入的情況。

使用方法如下:

use think\db\Where;
 
$map = [
 'name' => ['like', 'thinkphp%'],
 'title' => ['like', '%think%'],
 'id' => ['>', 10],
 'status' => 1,
];
 
$where  = new Where;
$where['id'] = ['in', [1, 2, 3]];
$where['title'] = ['like', '%php%'];
 
Db::table('think_user')
 ->where(new Where($map))
 ->whereOr($where->enclose())
 ->select();

enclose方法表示該查詢(xún)條件兩邊會(huì)加上括號(hào)包起來(lái)。

使用數(shù)組對(duì)象查詢(xún)的情況請(qǐng)一定要注意做好數(shù)據(jù)類(lèi)型檢查,盡量避免讓用戶(hù)決定你的數(shù)據(jù)。

生成的SQL是:

SELECT * FROM `think_user` 
WHERE `name` LIKE 'thinkphp%' 
AND `title` LIKE '%think%' 
AND `id` > 10 
AND `status` =1 
OR ( `id` IN (1,2,3) AND `title` LIKE '%php%' )

閉包查詢(xún)

$name = 'thinkphp';
$id = 10;
Db::table('think_user')->where(function ($query) use($name, $id) {
 $query->where('name', $name)
 ->whereOr('id', '>', $id);
})->select();

生成的SQL語(yǔ)句為:

SELECT * FROM `think_user` WHERE ( `name` = 'thinkphp' OR `id` > 10 )

可見(jiàn)每個(gè)閉包條件兩邊也會(huì)自動(dòng)加上括號(hào),但需要注意,使用閉包查詢(xún)的時(shí)候不能使用cache(true)數(shù)據(jù)緩存,而應(yīng)該使用指定key的方式例如cache('key')。

混合查詢(xún)

可以結(jié)合前面提到的所有方式進(jìn)行混合查詢(xún),例如:

Db::table('think_user')
 ->where('name', ['like', 'thinkphp%'], ['like', '%thinkphp'])
 ->where(function ($query) {
 $query->where('id', ['<', 10], ['>', 100], 'or');
 })
 ->select();

生成的SQL語(yǔ)句是:

SELECT * FROM `think_user` 
WHERE ( `name` LIKE 'thinkphp%' AND `name` LIKE '%thinkphp' ) 
AND ( `id` < 10 or `id` > 100 )

字符串條件查詢(xún)

對(duì)于一些實(shí)在復(fù)雜的查詢(xún),也可以直接使用原生SQL語(yǔ)句進(jìn)行查詢(xún),例如:

Db::table('think_user')
 ->where('id > 0 AND name LIKE "thinkphp%"')
 ->select();

為了安全起見(jiàn),我們可以對(duì)字符串查詢(xún)條件使用參數(shù)綁定,例如:

Db::table('think_user')
 ->where('id > :id AND name LIKE :name ', ['id' => 0, 'name' => 'thinkphp%'])
 ->select();

V5.1.8+版本開(kāi)始,如果你要使用字符串條件查詢(xún),推薦使用whereRaw方法。

Db::table('think_user')
 ->whereRaw('id > :id AND name LIKE :name ', ['id' => 0, 'name' => 'thinkphp%'])
 ->select();

使用Query對(duì)象查詢(xún)(V5.1.5+)

V5.1.5+版本開(kāi)始,可以通過(guò)調(diào)用一次where方法傳入Query對(duì)象來(lái)進(jìn)行查詢(xún)。

$query = new \think\db\Query;
$query->where('id','>',0)
	->where('name','like','%thinkphp');
 
Db::table('think_user')
 ->where($query)
 ->select();

Query對(duì)象的where方法僅能調(diào)用一次,如果query對(duì)象里面使用了非查詢(xún)條件的鏈?zhǔn)椒椒ǎ瑒t不會(huì)傳入當(dāng)前查詢(xún)。

$query = new \think\db\Query;
$query->where('id','>',0)
	->where('name','like','%thinkphp')
 ->order('id','desc') // 不會(huì)傳入后面的查詢(xún)
 ->field('name,id'); // 不會(huì)傳入后面的查詢(xún)
 
Db::table('think_user')
 ->where($query)
 ->where('title','like','thinkphp%') // 有效
 ->select();

快捷方法

系統(tǒng)封裝了一系列快捷方法,用于簡(jiǎn)化查詢(xún),包括:

方法 作用
whereOr 字段OR查詢(xún)
whereXor 字段XOR查詢(xún)
whereNull 查詢(xún)字段是否為Null
whereNotNull 查詢(xún)字段是否不為Null
whereIn 字段IN查詢(xún)
whereNotIn 字段NOT IN查詢(xún)
whereBetween 字段BETWEEN查詢(xún)
whereNotBetween 字段NOT BETWEEN查詢(xún)
whereLike 字段LIKE查詢(xún)
whereNotLike 字段NOT LIKE查詢(xún)
whereExists EXISTS條件查詢(xún)
whereNotExists NOT EXISTS條件查詢(xún)
whereExp 表達(dá)式查詢(xún)
whereColumn 比較兩個(gè)字段

下面舉例說(shuō)明下兩個(gè)字段比較的查詢(xún)條件whereColumn方法的用法。

查詢(xún)update_time大于create_time的用戶(hù)數(shù)據(jù)

Db::table('think_user')
 ->whereColumn('update_time','>','create_time')
 ->select();

生成的SQL語(yǔ)句是:

SELECT * FROM `think_user` WHERE ( `update_time` > `create_time` ) 

查詢(xún)namenickname相同的用戶(hù)數(shù)據(jù)

Db::table('think_user')
 ->whereColumn('name','=','nickname')
 ->select();

生成的SQL語(yǔ)句是:

SELECT * FROM `think_user` WHERE ( `name` = `nickname` )

相同字段條件也可以簡(jiǎn)化為

Db::table('think_user')
 ->whereColumn('name','nickname')
 ->select();

V5.1.11+版本開(kāi)始,支持?jǐn)?shù)組方式比較多個(gè)字段

Db::name('user')->whereColumn([
	['title', '=', 'name'],
 ['update_time', '>=', 'create_time'],
])->select();

生成的SQL語(yǔ)句是:

SELECT * FROM `think_user` 
WHERE ( `name` = `nickname` AND `update_time` > `create_time` ) 

動(dòng)態(tài)查詢(xún)

查詢(xún)構(gòu)造器還提供了兩個(gè)動(dòng)態(tài)查詢(xún)機(jī)制,用于簡(jiǎn)化查詢(xún)條件,包括getBygetFieldBy。

動(dòng)態(tài)查詢(xún) 描述
whereFieldName 查詢(xún)某個(gè)字段的值
whereOrFieldName 查詢(xún)某個(gè)字段的值
getByFieldName 根據(jù)某個(gè)字段查詢(xún)
getFieldByFieldName 根據(jù)某個(gè)字段獲取某個(gè)值

其中FieldName表示數(shù)據(jù)表的實(shí)際字段名稱(chēng)的駝峰法表示,假設(shè)數(shù)據(jù)表user中有emailnick_name字段,我們可以這樣來(lái)查詢(xún)。

// 根據(jù)郵箱(email)查詢(xún)用戶(hù)信息
$user = Db::table('user')
	->whereEmail('thinkphp@qq.com')
 ->find();
 
// 根據(jù)昵稱(chēng)(nick_name)查詢(xún)用戶(hù)
$email = Db::table('user')
 ->whereNickName('like', '%流年%')
 ->select();
 
// 根據(jù)郵箱查詢(xún)用戶(hù)信息
$user = Db::table('user')
 ->getByEmail('thinkphp@qq.com');
 
// 根據(jù)昵稱(chēng)(nick_name)查詢(xún)用戶(hù)信息
$user = Db::table('user')
 ->field('id,name,nick_name,email')
 ->getByNickName('流年');
 
// 根據(jù)郵箱查詢(xún)用戶(hù)的昵稱(chēng)
$nickname = Db::table('user')
 ->getFieldByEmail('thinkphp@qq.com', 'nick_name');
 
// 根據(jù)昵稱(chēng)(nick_name)查詢(xún)用戶(hù)郵箱
$email = Db::table('user')
 ->getFieldByNickName('流年', 'email');

getBygetFieldBy方法只會(huì)查詢(xún)一條記錄,可以和其它的鏈?zhǔn)椒椒ù钆涫褂?/p>

條件查詢(xún)

5.1的查詢(xún)構(gòu)造器支持條件查詢(xún),例如:

Db::name('user')->when($condition, function ($query) {
 // 滿(mǎn)足條件后執(zhí)行
 $query->where('score', '>', 80)->limit(10);
})->select();

并且支持不滿(mǎn)足條件的分支查詢(xún)

Db::name('user')->when($condition, function ($query) {
 // 滿(mǎn)足條件后執(zhí)行
 $query->where('score', '>', 80)->limit(10);
}, function ($query) {
 // 不滿(mǎn)足條件執(zhí)行
 $query->where('score', '>', 60);
});

更多關(guān)于thinkPHP相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《ThinkPHP入門(mén)教程》、《thinkPHP模板操作技巧總結(jié)》、《ThinkPHP常用方法總結(jié)》、《codeigniter入門(mén)教程》、《CI(CodeIgniter)框架進(jìn)階教程》、《Zend FrameWork框架入門(mén)教程》及《PHP模板技術(shù)總結(jié)》。

希望本文所述對(duì)大家基于ThinkPHP框架的PHP程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評(píng)論

陵川县| 安龙县| 旬阳县| 承德县| 大石桥市| 重庆市| 塔城市| 旺苍县| 南城县| 特克斯县| 海原县| 永泰县| 康马县| 玉山县| 元氏县| 开原市| 商河县| 吉安市| 合江县| 龙州县| 临邑县| 宁明县| 吉隆县| 彭泽县| 闽侯县| 天门市| 上蔡县| 南昌县| 会同县| 利津县| 织金县| 京山县| 岳西县| 唐海县| 滨海县| 同心县| 堆龙德庆县| 茂名市| 宁国市| 石台县| 浦城县|