ThinkPHP開發(fā)指南-模型之創(chuàng)建數(shù)據(jù)
導航:上一頁
在進行數(shù)據(jù)操作之前,我們往往需要手動創(chuàng)建需要的數(shù)據(jù),例如對于提交的表單數(shù)據(jù):
// 獲取表單的POST數(shù)據(jù)
PHP代碼
$data['name'] = $_POST['name']; $data['email'] = $_POST['email'];
// 更多的表單數(shù)據(jù)值獲取
……
然而ThinkPHP可以幫助你快速地創(chuàng)建數(shù)據(jù)對象,最典型的應用就是自動根據(jù)表單數(shù)據(jù)創(chuàng)建數(shù)據(jù)對象,這個優(yōu)勢在一個數(shù)據(jù)表的字段非常之多的情況下尤其明顯。
很簡單的例子:
// 實例化User模型 PHP代碼
$User->create();
// 把創(chuàng)建的數(shù)據(jù)對象寫入數(shù)據(jù)庫
PHP代碼
$User->add();
Create方法支持從其它方式創(chuàng)建數(shù)據(jù)對象,例如,從其它的數(shù)據(jù)對象,或者數(shù)組等
PHP代碼
$data['name'] = 'ThinkPHP'; $data['email'] = 'ThinkPHP@gmail.com'; $User->create($data);
甚至還可以支持從對象創(chuàng)建新的數(shù)據(jù)對象
// 從User數(shù)據(jù)對象創(chuàng)建新的Member數(shù)據(jù)對象
PHP代碼
$User = M("User"); $User->find(1); $Member = M("Member"); $Member->create($User);
而事實上,create方法所做的工作遠非這么簡單,在創(chuàng)建數(shù)據(jù)對象的同時,完成了一些很有意義的工作,包括:
- 支持多種數(shù)據(jù)源
- 令牌驗證
- 數(shù)據(jù)自動驗證
- 字段映射支持
- 字段類型檢查
- 數(shù)據(jù)自動完成
因此,我們熟悉的令牌驗證、自動驗證和自動完成(我們會在后面看到相關的用法)功能,其實都必須通過create方法才能生效。Create方法創(chuàng)建的數(shù)據(jù)對象是保存在內存中,并沒有實際寫入到數(shù)據(jù)庫中,直到使用add或者save方法。如果只是想簡單創(chuàng)建一個數(shù)據(jù)對象,并不需要完成一些額外的功能的話,可以使用data方法簡單的創(chuàng)建數(shù)據(jù)對象。
使用如下:
// 實例化User模型 PHP代碼
$User = M('User');
// 創(chuàng)建數(shù)據(jù)后寫入到數(shù)據(jù)庫 PHP代碼
$data['name'] = 'ThinkPHP'; $data['email'] = 'ThinkPHP@gmail.com'; $User->data($data)->add();
使用data方法創(chuàng)建的數(shù)據(jù)對象不會進行自動驗證和過濾操作,請自行處理。但在進行add或者save操作的時候,數(shù)據(jù)表中不存在的字段以及非法的數(shù)據(jù)類型(例如對象、數(shù)組等非標量數(shù)據(jù))是會自動過濾的,不用擔心非數(shù)據(jù)表字段的寫入導致SQL錯誤的問題。