今天學到了對ThinkPHP的增、刪、改、查的一些操作,感覺寫的挺清楚的,大家一起學習一下吧!
一、創建操作
在ThinkPHP使用add方法新增數據到數據庫。
使用方法如下:
$User = M("User"); // 實例化User對象
$data['name'] = 'ThinkPHP';
$data['email'] = '[email protected]';
$User->add($data);
或者使用data方法連貫操作
$User->data($data)->add();
如果在add之前已經創建數據對象的話(例如使用了create或者data方法),add方法就不需要再傳入數據了。
使用create方法的例子:
$User = M("User"); // 實例化User對象
// 根據表單提交的POST數據創建數據對象
$User->create();
$User->add(); // 根據條件保存修改的數據
如果你的主鍵是自動增長類型,並且如果插入數據成功的話,Add方法的返回值就是最新插入的主鍵值,可以直接獲取。
二、讀取數據
在ThinkPHP中讀取數據的方式很多,通常分爲讀取數據和讀取數據集。
讀取數據集使用findall或者select方法(findall和select方法等效):
$User = M("User"); // 實例化User對象
// 查找status值爲1的用戶數據以創建時間排序返回10條數據
$list = $User->where('status=1')->order('create_time')->limit(10)->select();
select方法的返回值是一個二維數組,如果沒有查詢到任何結果的話,也是返回一個空的數組。配合上面提到的連貫操作方法可以完成複雜的數據查詢。而最複雜的連貫方法應該是where方法的使用,因爲這部分涉及的內容較多,我們會在查詢語言部分就如何進行組裝查詢條件進行詳細的使用說明。基本的查詢暫時不涉及關聯查詢部分,而是統一採用關聯模型來進行數據操作,這一部分請參考關聯模型部分。
讀取數據使用find方法:
讀取數據的操作其實和數據集的類似,select可用的所有連貫操作方法也都可以用於find方法,區別在於find方法最多隻會返回一條記錄,因此limit方法對於find查詢操作是無效的。
$User = M("User"); // 實例化User對象
// 查找status值爲1name值爲think的用戶數據
$User->where('status=1 AND name="think" ')->find();
即使滿足條件的數據不止一條,find方法也只會返回第一條記錄。
如果要讀取某個字段的值,可以使用getField方法,例如:
$User = M("User"); // 實例化User對象
// 獲取ID爲3的用戶的暱稱
$nickname = $User->where('id=3')->getField('nickname');
當只有一個字段的時候,始終返回一個值。
如果傳入多個字段的話,可以返回一個關聯數組:
$User = M("User"); // 實例化User對象
// 獲取所有用戶的ID和暱稱列表
$list = $User->getField('id,nickname');
返回的list是一個數組,鍵名是用戶的id, 鍵值是用戶的暱稱nickname。
三、更新數據
在ThinkPHP中使用save方法更新數據庫,並且也支持連貫操作的使用。
$User = M("User"); // 實例化User對象
// 要修改的數據對象屬性賦值
$data['name'] = 'ThinkPHP';
$data['email'] = '[email protected]';
$User->where('id=5')->save($data); // 根據條件保存修改的數據
爲了保證數據庫的安全,避免出錯更新整個數據表,如果沒有任何更新條件,數據對象本身也不包含主鍵字段的話,save方法不會更新任何數據庫的記錄。
因此下面的代碼不會更改數據庫的任何記錄
$User->save($data);
除非使用下面的方式:
$User = M("User"); // 實例化User對象
// 要修改的數據對象屬性賦值
$data['id'] = 5;
$data['name'] = 'ThinkPHP';
$data['email'] = '[email protected]';
$User->save($data); // 根據條件保存修改的數據
如果id是數據表的主鍵的話,系統自動會把主鍵的值作爲更新條件來更新其他字段的值。
還有一種方法是通過create或者data方法創建要更新的數據對象,然後進行保存操作,這樣save方法的參數可以不需要傳入。
$User = M("User"); // 實例化User對象
// 要修改的數據對象屬性賦值
$data['name'] = 'ThinkPHP';
$data['email'] = '[email protected]';
$User->where('id=5')->data($data)->save(); // 根據條件保存修改的數據
使用create方法的例子:
$User = M("User"); // 實例化User對象
// 根據表單提交的POST數據創建數據對象
$User->create();
$User->save(); //根據條件保存要修改的數據
上面的情況,表單中必須包含一個以主鍵爲名稱的隱藏域,才能完成保存操作。
如果只是更新個別字段的值,可以使用setField方法:
$User = M("User"); // 實例化User對象
// 更改用戶的name值
$User-> where('id=5')->setField('name','ThinkPHP');
setField方法支持同時更新多個字段,只需要傳入數組即可,例如:
$User = M("User"); // 實例化User對象
// 更改用戶的name和email的值
$User-> where('id=5')->setField(array('name','email'),array('ThinkPHP','[email protected]'));
而對於統計字段(通常指的是數字類型)的更新,系統還提供了setInc和setDec方法:
$User = M("User"); // 實例化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
四、刪除數據
在ThinkPHP中使用delete方法刪除數據庫中的記錄。同樣可以使用連貫操作進行刪除操作。
$User = M("User"); // 實例化User對象
$User->where('id=5')->delete(); // 刪除id爲5的用戶數據
$User->where('status=0')->delete(); // 刪除所有狀態爲0的用戶數據
delete方法可以用於刪除單個或者多個數據,主要取決於刪除條件,也就是where方法的參數,也可以用order和limit方法來限制要刪除的個數,例如:
// 刪除所有狀態爲0的5個用戶數據按照創建時間排序
$User->where('status=0')->order('create_time')->limit('5')->delete();
轉載:http://blog.csdn.net/mengyun00/article/details/7788747