thinkphp是PHP架構,簡稱
tp,今天就來講講,
tp的增刪查改,瞭解
tp的增刪查改,我相信,你肯定會覺得之前用的原生的真的是太麻煩了,恨不得寫啥都用
tp,讓我們來看看吧!
一、建立操作
在ThinkPHP使用add方法新增資料到資料庫。
使用方法如下:
$User = M("User"); // 執行個體化User對象$data['name'] = 'ThinkPHP';$data['email'] = 'ThinkPHP@gmail.com';$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'] = 'ThinkPHP@gmail.com';$User->where('id=5')->save($data); // 根據條件儲存修改的資料
為了保證資料庫的安全,避免出錯更新整個資料表,如果沒有任何更新條件,資料對象本身也不包含主鍵欄位的話,save方法不會更新任何資料庫的記錄。
因此下面的代碼不會更改資料庫的任何記錄
$User->save($data);
除非使用下面的方式:
$User = M("User"); // 執行個體化User對象
// 要修改的資料對象屬性賦值
$data['id'] = 5;$data['name'] = 'ThinkPHP';$data['email'] = 'ThinkPHP@gmail.com';$User->save($data); // 根據條件儲存修改的資料
如果id是資料表的主鍵的話,系統自動會把主鍵的值作為更新條件來更新其他欄位的值。
還有一種方法是通過create或者data方法建立要更新的資料對象,然後進行儲存操作,這樣save方法的參數可以不需要傳入。
$User = M("User"); // 執行個體化User對象
// 要修改的資料對象屬性賦值
$data['name'] = 'ThinkPHP';$data['email'] = 'ThinkPHP@gmail.com';$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','ThinkPHP@gmail.com'));
而對於統計欄位(通常指的是數字類型)的更新,系統還提供了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();