久久精品水蜜桃av综合天堂,久久精品丝袜高跟鞋,精品国产肉丝袜久久,国产一区二区三区色噜噜,黑人video粗暴亚裔

ThinkPHP開發(fā)指南-模型之連貫操作

來自站長百科
跳轉(zhuǎn)至: 導(dǎo)航、? 搜索

導(dǎo)航:上一頁

ThinkPHP2.0版本全面啟用模型類的連貫操作方法,可以有效的提高數(shù)據(jù)存取的代碼清晰度和開發(fā)效率。使用方面也比較簡單, 假如我們現(xiàn)在要查詢一個User表的滿足狀態(tài)為1的前10條記錄,并希望按照用戶的創(chuàng)建時間排序 ,代碼如下:

PHP代碼

$User->where('status=1')->order('create_time')->limit(10)->select(); 

除了select方法必須放到最后一個外,其他的連貫操作的方法調(diào)用順序沒有先后,例如,下面的代碼和上面的等效:

PHP代碼

$User->order('create_time')->where('status=1')->limit(10)->select();

如果不習(xí)慣使用連貫操作的話,新版還支持直接使用參數(shù)進(jìn)行查詢的方式。例如上面的代碼可以改寫為:

PHP代碼

$User->select(array('order'=>'create_time', 'where'=>'status=1', 'limit'=>'10')); 

使用數(shù)組參數(shù)方式的話,索引的名稱就是連貫操作的方法名稱。其實不僅僅是查詢方法可以使用連貫操作,包括add、 save、delete等方法都可以使用,例如:

PHP代碼


$User->where('id=1')->field('id,name,email')->find();     

$User->where('status=1 and id=1')->delete();

原則上說,所有的連貫操作都只有一個參數(shù),并且連貫操作的參數(shù)僅在當(dāng)此查詢或者操作有效,完成后會自動清空連貫操作的所有傳值,簡而言之,連貫操作的結(jié)果不會帶入以后的查詢。下面總結(jié)下連貫操作的使用方法(更多的用法我們會在CURD操作的過程中詳細(xì)描述):

Where方法:用于查詢或者更新條件的定義.

Where方法的參數(shù)支持字符串、數(shù)組和對象。詳細(xì)的使用請參考后面的查詢語言部分。

Table方法:定義要操作的數(shù)據(jù)表名稱

可以動態(tài)改變當(dāng)前操作的數(shù)據(jù)表名稱,需要寫數(shù)據(jù)表的全名,包含前綴,可以使用別名,例如:

PHP代碼

$Model->Table('think_user user')->where('status>1')->select();   

Table方法的參數(shù)支持字符串和數(shù)組,數(shù)組方式的用法:

PHP代碼

$Model->Table(array('think_user'=>'user','think_group'=>'group'))->where('status>1')->select();  

使用數(shù)組方式定義的優(yōu)勢是可以避免因為表名和關(guān)鍵字沖突而出錯的情況。如果不定義table方法,默認(rèn)會自動獲取當(dāng)前模型對應(yīng)或者定義的數(shù)據(jù)表。

Data方法:數(shù)據(jù)對象賦值

可以用于新增或者保存數(shù)據(jù)之前的數(shù)據(jù)對象賦值,例如:

PHP代碼

$Model->data($data)->add();    

$Model->data($data)->where('id=3')->save();

Data方法的參數(shù)支持對象數(shù)組,如果是對象會自動轉(zhuǎn)換成數(shù)組。如果不定義data方法賦值,也可以使用create方法或者手動給數(shù)據(jù)對象賦值的方式。

Field方法:定義要查詢的字段

Field方法的參數(shù)支持字符串和數(shù)組,例如,

PHP代碼

$Model->field('id,nickname as name')->select();    

$Model->field(array('id','nickname'=>'name'))->select();

如果不使用field方法指定字段的話,默認(rèn)和使用field('*')等效。

Order方法:結(jié)果排序 . 例如:

PHP代碼

order('id desc') 

排序方法支持對多個字段的排序

PHP代碼

order('status desc,id asc')

order方法的參數(shù)支持字符串和數(shù)組,數(shù)組的用法如下:

PHP代碼

order(array('status'=>'desc','id')) 

Limit方法:結(jié)果限制

我們知道不同的數(shù)據(jù)庫類型的limit用法是不盡相同的,但是在ThinkPHP的用法里面始終是統(tǒng)一的方法,也就是limit('offset,length') ,無論是Mysql、SqlServer還是Oracle數(shù)據(jù)庫,都是這樣使用,系統(tǒng)的數(shù)據(jù)庫驅(qū)動類會負(fù)責(zé)解決這個差異化。

例如

PHP代碼

limit('1,10') 

如果使用limit('10') 等效于 limit('0,10')

Page方法:查詢分頁

Page操作方法是新增的特性,可以更加快速的進(jìn)行分頁查詢。Page方法的用法和limit方法類似,格式為:

PHP代碼

Page('page[,listRows]') 

Page表示當(dāng)前的頁數(shù),listRows表示每頁顯示的記錄數(shù)。例如:Page('2,10') 表示每頁顯示10條記錄的情況下面,獲取第2頁的數(shù)據(jù)。listRow如果不寫的話,會讀取limit('length') 的值,例如:

PHP代碼

limit(25)->page(3); 

表示每頁顯示25條記錄的情況下面,獲取第3頁的數(shù)據(jù)。如果limit也沒有設(shè)置的話,則默認(rèn)為每頁顯示20條記錄。

Group方法:查詢Group支持 例如:group('user_id')

Group方法的參數(shù)只支持字符串

Having方法:查詢Having支持 例如:

PHP代碼

having('user_id>0'

having方法的參數(shù)只支持字符串

Join方法:查詢Join支持

Join方法的參數(shù)支持字符串和數(shù)組,并且join方法是連貫操作中唯一可以多次調(diào)用的方法。例如:

PHP代碼

$Model->join(' work ON artist.id = work.artist_id')->join('card ON artist.card_id = card.id')->select(); 

默認(rèn)采用LEFT JOIN 方式,如果需要用其他的JOIN方式,可以改成

PHP代碼

$Model->join('RIGHT JOIN work ON artist.id = work.artist_id')->select();

如果join方法的參數(shù)用數(shù)組的話,只能使用一次join方法,并且不能和字符串方式混合使用.

PHP代碼

join(array(' work ON artist.id = work.artist_id','card ON artist.card_id = card.id'))

Distinct方法:查詢的Disiinct支持

查詢數(shù)據(jù)的時候進(jìn)行唯一過濾

PHP代碼

$Model->Distinct(true)->select();

Relation方法:關(guān)聯(lián)查詢支持

關(guān)聯(lián)查詢方法的詳細(xì)用法請參考后面的關(guān)聯(lián)模型部分。

Lock方法:查詢鎖定

Lock方法是用于數(shù)據(jù)庫的鎖機(jī)制,如果在查詢或者執(zhí)行操作的時候使用:

PHP代碼

ck(true) 

就會自動在生成的SQL語句最后加上 FOR UPDATE。