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

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

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

導(dǎo)航:上一頁

ThinkPHP提供了靈活和方便的數(shù)據(jù)操作方法,對數(shù)據(jù)庫操作的四個基本操作(CURD):創(chuàng)建、更新、讀取和刪除的實(shí)現(xiàn)是最基本的,也是必須掌握的,在這基礎(chǔ)之上才能熟悉更多實(shí)用的數(shù)據(jù)操作方法。CURD操作通常是可以和連貫操作配合完成的。下面來分析下各自的用法:

(下面的CURD操作我們均以M方法創(chuàng)建模型實(shí)例來說明,因?yàn)椴簧婕暗骄唧w的業(yè)務(wù)邏輯)

  • 創(chuàng)建操作

在ThinkPHP使用add方法新增數(shù)據(jù)到數(shù)據(jù)庫。使用方法如下:

PHP代碼


$User = M("User"); // 實(shí)例化User對象    

$data['name'] = 'ThinkPHP';    

$data['email'] = 'ThinkPHP@gmail.com';    

$User->add($data);   

或者使用data方法連貫操作

PHP代碼

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

如果在add之前已經(jīng)創(chuàng)建數(shù)據(jù)對象的話(例如使用了create或者data方法),add方法就不需要再傳入數(shù)據(jù)了。使用create方法的例子:

PHP代碼

$User = M("User"); // 實(shí)例化User對象    

// 根據(jù)表單提交的POST數(shù)據(jù)創(chuàng)建數(shù)據(jù)對象    

$User->create();    

$User->add(); // 根據(jù)條件保存修改的數(shù)據(jù)  

如果你的主鍵是自動增長類型,并且如果插入數(shù)據(jù)成功的話,Add方法的返回值就是最新插入的主鍵值,可以直接獲取。

  • 讀取數(shù)據(jù)

在ThinkPHP中讀取數(shù)據(jù)的方式很多,通常分為讀取數(shù)據(jù)和讀取數(shù)據(jù)集。讀取數(shù)據(jù)集使用findall或者select方法(findall和select方法等效):

PHP代碼


$User = M("User"); // 實(shí)例化User對象    

// 查找status值為1的用戶數(shù)據(jù) 以創(chuàng)建時間排序 返回10條數(shù)據(jù)    

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

select方法的返回值是一個二維數(shù)組,如果沒有查詢到任何結(jié)果的話,也是返回一個空的數(shù)組。配合上面提到的連貫操作方法可以完成復(fù)雜的數(shù)據(jù)查詢。而最復(fù)雜的連貫方法應(yīng)該是where方法的使用,因?yàn)檫@部分涉及的內(nèi)容較多,我們會在查詢語言部分就如何進(jìn)行組裝查詢條件進(jìn)行詳細(xì)的使用說明。基本的查詢暫時不涉及關(guān)聯(lián)查詢部分,而是統(tǒng)一采用關(guān)聯(lián)模型來進(jìn)行數(shù)據(jù)操作,這一部分請參考關(guān)聯(lián)模型部分。

讀取數(shù)據(jù)使用find方法

讀取數(shù)據(jù)的操作其實(shí)和數(shù)據(jù)集的類似,select可用的所有連貫操作方法也都可以用于find方法,區(qū)別在于find方法最多只會返回一條記錄,因此limit方法對于find查詢操作是無效的。

PHP代碼

$User = M("User"); // 實(shí)例化User對象    

// 查找status值為1name值為think的用戶數(shù)據(jù)     

$User->where('status=1 AND name="think" ')->find();   

即使?jié)M足條件的數(shù)據(jù)不止一條,find方法也只會返回第一條記錄。如果要讀取某個字段的值,可以使用getField方法,例如:

PHP代碼

$User = M("User"); // 實(shí)例化User對象    

// 獲取ID為3的用戶的昵稱     

$nickname = $User->where('id=3')->getField('nickname');   

當(dāng)只有一個字段的時候,始終返回一個值。如果傳入多個字段的話,可以返回一個關(guān)聯(lián)數(shù)組:

PHP代碼

$User = M("User"); // 實(shí)例化User對象    

// 獲取所有用戶的ID和昵稱列表     

$list = $User->getField('id,nickname');   

返回的list是一個數(shù)組,鍵名是用戶的id, 鍵值是用戶的昵稱nickname。

  • 更新數(shù)據(jù)

在ThinkPHP中使用save方法更新數(shù)據(jù)庫,并且也支持連貫操作的使用。

PHP代碼

$User = M("User"); // 實(shí)例化User對象    

// 要修改的數(shù)據(jù)對象屬性賦值    

$data['name'] = 'ThinkPHP';    

$data['email'] = 'ThinkPHP@gmail.com';    

$User->where('id=5')->save($data); // 根據(jù)條件保存修改的數(shù)據(jù)   

為了保證數(shù)據(jù)庫的安全,避免出錯更新整個數(shù)據(jù)表,如果沒有任何更新條件,數(shù)據(jù)對象本身也不包含主鍵字段的話,save方法不會更新任何數(shù)據(jù)庫的記錄。因此下面的代碼不會更改數(shù)據(jù)庫的任何記錄

PHP代碼

$User->save($data);    

除非使用下面的方式:

PHP代碼

$User = M("User"); // 實(shí)例化User對象    

// 要修改的數(shù)據(jù)對象屬性賦值    

$data['id'] = 5;    

$data['name'] = 'ThinkPHP';    

$data['email'] = 'ThinkPHP@gmail.com';    

$User->save($data); // 根據(jù)條件保存修改的數(shù)據(jù)   

如果id是數(shù)據(jù)表的主鍵的話,系統(tǒng)自動會把主鍵的值作為更新條件來更新其他字段的值。還有一種方法是通過create或者data方法創(chuàng)建要更新的數(shù)據(jù)對象,然后進(jìn)行保存操作,這樣save方法的參數(shù)可以不需要傳入。

PHP代碼

$User = M("User"); // 實(shí)例化User對象    

// 要修改的數(shù)據(jù)對象屬性賦值

PHP代碼

$data['name'] = 'ThinkPHP';    

$data['email'] = 'ThinkPHP@gmail.com';    

$User->where('id=5')->data($data)->save(); // 根據(jù)條件保存修改的數(shù)據(jù)   

使用create方法的例子:

PHP代碼

$User = M("User"); // 實(shí)例化User對象    

// 根據(jù)表單提交的POST數(shù)據(jù)創(chuàng)建數(shù)據(jù)對象    

$User->create();    

$User->save(); // 根據(jù)條件保存修改的數(shù)據(jù)   

上面的情況,表單中必須包含一個以主鍵為名稱的隱藏域,才能完成保存操作。如果只是更新個別字段的值,可以使用setField方法:

PHP代碼

$User = M("User"); // 實(shí)例化User對象    

// 更改用戶的name值    

$User-> where('id=5')->setField('name','ThinkPHP');  

setField方法支持同時更新多個字段,只需要傳入數(shù)組即可,例如:

PHP代碼

$User = M("User"); // 實(shí)例化User對象    

// 更改用戶的name和email的值    

$User-> where('id=5')->setField(array('name','email'),array('ThinkPHP','ThinkPHP@gmail.com'));   

而對于統(tǒng)計(jì)字段(通常指的是數(shù)字類型)的更新,系統(tǒng)還提供了setInc和setDec方法:

PHP代碼

$User = M("User"); // 實(shí)例化User對象    

$User->setInc('score','id=5',3); // 用戶的積分加3    

$User->setInc('score','id=5'); // 用戶的積分加1    

$User->setDec('score','id=5',5); // 用戶的積分減5    

$User->setDec('score','id=5'); // 用戶的積分減1   
  • 刪除數(shù)據(jù)

在ThinkPHP中使用delete方法刪除數(shù)據(jù)庫中的記錄。同樣可以使用連貫操作進(jìn)行刪除操作。

PHP代碼

$User = M("User"); // 實(shí)例化User對象    

$User->where('id=5')->delete(); // 刪除id為5的用戶數(shù)據(jù)    

$User->where('status=0')->delete(); // 刪除所有狀態(tài)為0的用戶數(shù)據(jù)   

delete方法可以用于刪除單個或者多個數(shù)據(jù),主要取決于刪除條件,也就是where方法的參數(shù),也可以用order和limit方法來限制要刪除的個數(shù),例如:

// 刪除所有狀態(tài)為0的5 個用戶數(shù)據(jù) 按照創(chuàng)建時間排序

PHP代碼

$User->where('status=0')->order('create_time')->limit('5')->delete();