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