ThinkPHP的增、刪、改、查

Away_D發表於2017-08-03

一、建立操作

在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物件

// 獲取ID3的使用者的暱稱

$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物件

// 更改使用者的nameemail的值

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

而對於統計欄位(通常指的是數字型別)的更新,系統還提供了setIncsetDec方法:

$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(); // 刪除id5的使用者資料

$User->where('status=0')->delete(); // 刪除所有狀態為0的使用者資料

delete方法可以用於刪除單個或者多個資料,主要取決於刪除條件,也就是where方法的引數,也可以用orderlimit方法來限制要刪除的個數,例如:

// 刪除所有狀態為05個使用者資料按照建立時間排序

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

相關文章