ThinkPHP的增、刪、改、查

韦小宝
發布: 2023-03-17 17:04:02
原創
1800 人瀏覽過

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();
登入後複製

以上就是tp的增删查改四种方法了,更多关于tp的内天请到本站搜索哦~

相关推荐:

tp上传图片与生成缩略图功能的实现示例

TP5实现邮件发送服务封装以及可发附件的实例

TP5改写跳转提示页面的实现方法

以上是ThinkPHP的增、刪、改、查的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板