CURD的意思就是數據庫四種操作的合稱,即“Create,Update,Read,Delete(創建,修改,讀取,刪除)”,在開發指南里也有詳細介紹.
ThinkPHP 提供了靈活和方便的數據操作方法,不僅實現了對數據庫操作的四大基本操作(CURD):創建、讀取、更新和刪除的實現,還內置了很多實用的數據操作方法,提供了 ActiveRecords 模式的最佳體驗.
Model 類將數據庫操作統一為 CURD 和一個 SQL 查詢方法,也就是
_create 新增 (寫入)數據
_update 更新 (保存)數據
_read 讀取(查詢)數據
_delete 刪除數據
_query SQL 查詢
其它的所有方法基本上對你調用這些基礎方法進行操作,但是我們無需關注這些細節,只需要按照提供的抽象方法來操作,我們來看看在 ThinkPHP 中是怎么進行數據操作的.
1、新建記錄
- // 實例化一個 User 模型對象
- $User = new UserModel();
- // 然后給數據對象賦值
- $User‐>name = ‘ThinkPHP’;
- $User‐>email = ‘[email protected]’;
- // 然后就可以保存新建的 User 對象了
- $User‐>add();
- // 如果需要鎖實例化模型對象的時候傳入數據,可以使用
- $data[‘name’] = ‘ThinkPHP’;
- $data[‘email’] = ‘[email protected]’;
- $User = new UserModel($data);
- $User‐>add();
- // 或者直接在 add 方法傳入要新建的數據
- $data[‘name’] = ‘ThinkPHP’;
- $data[‘email’] = ‘[email protected]’;
- $User = new UserModel();
- $User‐>add($data);
如果你的主鍵是自動增長類型,不需要傳入主鍵的值就可以新建數據,并且如果插入數據成功的話,Add 方法的返回值就是最新插入的主鍵值,可以直接獲取.
$insertId = $User‐>add($data);
一般情況下,應用中的數據對象不太可能通過手動賦值的方式寫入,而是有個數據對象的創建過程.
ThinkPHP 提供了一個 create 方法來創建數據對象,然后進行其它的新增或者編輯操作.
- $User = D(“User”);
- $User‐>create(); // 創建 User 數據對象,默認通過表單提交的數據進行創建
- $User‐>add(); // 新增表單提交的數據
- Create 方法支持從其它方式創建數據對象,例如,從其它的數據對象,或者數組等
- $data[‘name’] = ‘ThinkPHP’;
- $data[‘email’] = ‘[email protected]’;
- $User‐>create($data);
- // 從 User 數據對象創建新的 Member 數據對象
- $Member = D(“Member”);
- $Member‐>create($User);
- 支持新增多條記錄
- $User = new UserModel();
- $data[0][‘name’] = ‘ThinkPHP’;
- $data[0][‘email’] = ‘[email protected]’;
- $data[1][‘name’] = ‘流年’;
- $data[1][‘email’] = ‘[email protected]’;
- $User‐>addAll($data);
在 MySql 數據庫下面,會自動使用一條 SQL 語句實現多數據的插入.
2、查詢記錄
讀取數據庫的記錄我覺得是數據庫操作中的最有意思的一件事情了,寫過文本數據庫的人都知道,保存和刪除數據不難(無非是規范和效率問題),難在可以通過各種方式來查找需要的數據,ThinkPHP 通過各種努力,讓數據庫的查詢操作變得輕而易舉,也讓 ThinkPHP 變得富有內涵.
ThinkPHP 有一個非常明確的約定,就是單個數據查詢和多個數據查詢的方法是分開的,或者你會認為有時候自己也不知道要查詢的數據是單個還是多個,但是有一點是明確的,你需要的是返回一個數據還是希望返回的是一個數據集,因為對兩種類型的返回數據的操作方式是截然不同的,無論何種方式的返回,我們都可以直接在模型對象里面操作,當然也一樣可以作為數據傳遞給你需要的變量.
先舉個最簡單的例子,假如我們要查詢主鍵為 8 的某個用戶記錄,我們可以使用下面的一些方法:
$User‐>find(8);
這個作為查詢語言來說是最為直觀的,如果查詢成功,查詢的結果直接保存在當前的數據對象中,在進行下一次查詢操作之前,我們都可以提取,例如獲取查詢的結果數據:
$name = $User‐>name;
$email = $User‐>email;
遍歷查詢到的數據對象屬性
- foreach ($User as $key=>$val){
- echo($key.’:’.$val);
- }
- // 或者進行相關的數據更改和保存操作
也可以用變量保存下來以便隨時使用。
$user = $User‐>find(8);
對于上面的查詢條件,我們還可以使用getById 來完成相同的查詢.
$User‐>getById(8);
需要注意的是,對于 find 方法來說,即使查詢結果有多條記錄,也只會返回符合條件的第一條記錄,如果要返回符合要求的所有記錄,請使用 findAll 方法.
- // 查詢主鍵為 1、3、8 的記錄集
- $User‐>findAll(‘1,3,8’);
- // 遍歷數據列表
- foreach ($User as $vo){
- dump($vo‐>name);
- }
3、更新記錄
了解了查詢記錄后,更新操作就顯得非常簡單了.
- $User‐>find(1); // 查找主鍵為 1 的數據
- $User‐>name = ‘TOPThink’; // 修改數據對象
- $User‐>save(); // 保存當前數據對象
- // 還可以使用下面的方式更新
- $User‐>score = ‘(score+1)’; // 對用戶的積分加 1
- $User‐>save();
如果不是使用數據對象的方式來保存,可以傳入要保存的數據和條件.
- $data[‘id’] = 1;
- $data[‘name’] = ‘TopThink’;
- $User‐>save($data);
除了 save 方法外,你還可以使用 setField 方法來更新特定字段的值,例如:
$User‐>setField(“name”,”TopThink”,’id=1’);
同樣可以支持對字段的操作
- $User‐>setField(“score”,”(score+1)”,’id=1’);
- // 或者改成下面的
- $User‐>setInc(“score”,’id=1’);
4、刪除記錄
- $User‐>find(2);
- $User‐>delete(); // 刪除查找到的記錄
- $User‐>delete(‘5,6’); // 刪除主鍵為 5、6 的數據
- $User‐>deleteAll(); // 刪除查詢出來的所有數據
新聞熱點
疑難解答
圖片精選