WIKI使用導(dǎo)航
站長百科導(dǎo)航
站長專題
- 網(wǎng)站推廣
- 網(wǎng)站程序
- 網(wǎng)站賺錢
- 虛擬主機(jī)
- cPanel
- 網(wǎng)址導(dǎo)航專題
- 云計算
- 微博營銷
- 虛擬主機(jī)管理系統(tǒng)
- 開放平臺
- WIKI程序與應(yīng)用
- 美國十大主機(jī)
ThinkPHP開發(fā)指南-模型之連貫操作
導(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。