數(shù)據(jù)創(chuàng)建
create方法創(chuàng)建數(shù)據(jù)對(duì)象
create()方法支持從其他方式創(chuàng)建數(shù)據(jù)對(duì)象,例如,其他數(shù)據(jù)對(duì)象或者是數(shù)組。
- 從User對(duì)象創(chuàng)建新的Member數(shù)據(jù)對(duì)象
$User = stdClass();
$User->name = 'ThinkPHP';
$User->email = 'ThinkPHP@gmail.com';
$Member = M("Member");
$Member->create($User);
- 從數(shù)組創(chuàng)建對(duì)象
$data['name'] = 'thinkphp';
$data['email'] = 'thinkphp@gmail.com';
$data['status'] = 1;
$User = M('User');
$data = $User->create($data);
創(chuàng)建失敗,打出錯(cuò)誤信息。
$User = D('User'); // 實(shí)例化User對(duì)象
if (!$User->create()) {
// 如果創(chuàng)建失敗 表示驗(yàn)證沒(méi)有通過(guò) 輸出錯(cuò)誤提示信息
$this->error($User->getError());
} else {
// 驗(yàn)證通過(guò) 可以進(jìn)行其他數(shù)據(jù)操作
}
create方法的第二個(gè)參數(shù)可以指定創(chuàng)建數(shù)據(jù)的操作狀態(tài),默認(rèn)情況下是自動(dòng)判斷是寫入還是更新操作。系統(tǒng)內(nèi)置的數(shù)據(jù)操作包括INSERT(1)和UPDATE(2),當(dāng)沒(méi)有指定的時(shí)候,系統(tǒng)根據(jù)數(shù)據(jù)源是否包含主鍵數(shù)據(jù)來(lái)自動(dòng)判斷,如果存在主鍵數(shù)據(jù),就當(dāng)成UPDATE操作。
$Member = M("User");
$Member->create($_POST,Model::MODEL_UPDATE);
create方法創(chuàng)建的數(shù)據(jù)對(duì)象是保存在內(nèi)存中,并沒(méi)有實(shí)際寫入到數(shù)據(jù)庫(kù)中,直到使用add或者save方法才會(huì)真正寫入數(shù)據(jù)庫(kù)。
$User = M('User');
$User->create(); //創(chuàng)建User數(shù)據(jù)對(duì)象
$User->status = 1; // 設(shè)置默認(rèn)的用戶狀態(tài)
$User->create_time = time(); // 設(shè)置用戶的創(chuàng)建時(shí)間
$User->add(); // 把用戶對(duì)象寫入數(shù)據(jù)庫(kù)
把用戶對(duì)象寫入數(shù)據(jù)庫(kù)create方法所做的工作很復(fù)雜,在創(chuàng)建數(shù)據(jù)對(duì)象的同時(shí),完成了一系列的工作。我們熟悉的令牌驗(yàn)證、自動(dòng)驗(yàn)證和自動(dòng)完成功能,其實(shí)都必須通過(guò)create方法才能生效。
data方法創(chuàng)建簡(jiǎn)單的數(shù)據(jù)對(duì)象
如果只是想簡(jiǎn)單創(chuàng)建一個(gè)數(shù)據(jù)對(duì)象,并不需要完成一些額外的功能的話,可以使用data方法簡(jiǎn)單的創(chuàng)建數(shù)據(jù)對(duì)象。Data方法也支持傳入數(shù)組和對(duì)象,使用data方法創(chuàng)建的數(shù)據(jù)對(duì)象不會(huì)進(jìn)行自動(dòng)驗(yàn)證和過(guò)濾操作,請(qǐng)自行處理。
$User = M('User');// 創(chuàng)建數(shù)據(jù)后寫入到數(shù)據(jù)庫(kù)
$data['name'] = 'ThinkPHP';
$data['email'] = 'ThinkPHP@gmail.com';
$User->data($data)->add();
數(shù)據(jù)寫入
add方法插入一條數(shù)據(jù)
$User = M("User"); // 實(shí)例化User對(duì)象
$data['name'] = 'ThinkPHP';
$data['email'] = 'ThinkPHP@gmail.com';
$User->add($data);
如果寫入了數(shù)據(jù)表中不存在的字段數(shù)據(jù),則會(huì)被直接過(guò)濾。其中test字段是不存在的,所以寫入數(shù)據(jù)的時(shí)候會(huì)自動(dòng)過(guò)濾掉。
$data['name'] = 'thinkphp';
$data['email'] = 'thinkphp@gmail.com';
$data['test'] = 'test';
$User = M('User');
$User->data($data)->add();
如果寫入結(jié)果$result數(shù)據(jù)非法則返回false,如果是自增主鍵 $result則返回主鍵值,否則返回1。
addAll方法插入批量數(shù)據(jù)
$User = M("User");
$dataList[] = array('name'=>'thinkphp','email'=>'thinkphp@gamil.com');
$dataList[] = array('name'=>'onethink','email'=>'onethink@gamil.com');
$User->addAll($dataList);
addAll返回的不是影響條數(shù),也不是返回的所有寫入的主鍵id集,而是返回的寫入的第一條數(shù)據(jù)的主鍵值。
該功能需要3.2.3以上版本,3.2.3以下版本僅對(duì)mysql數(shù)據(jù)庫(kù)支持
數(shù)據(jù)讀取
find讀取數(shù)據(jù)
如果查詢出錯(cuò),find方法返回false,如果查詢結(jié)果為空返回NULL,查詢成功則返回一個(gè)關(guān)聯(lián)數(shù)組(復(fù)合條件的第一條記錄)。
$User = M("User"); // 實(shí)例化User對(duì)象
$data = $User->where('status=1 AND name="thinkphp"')->find();// 查找status值為1name值為think的用戶數(shù)據(jù)
select讀取數(shù)據(jù)集
如果查詢出錯(cuò),select的返回值是false,如果查詢結(jié)果為空,則返回NULL,否則返回二維數(shù)組。
$User = M("User"); // 實(shí)例化User對(duì)象
$list = $User->where('status=1')->order('create_time')->limit(10)->select();// 查找status值為1的用戶數(shù)據(jù) 以創(chuàng)建時(shí)間排序 返回10條數(shù)據(jù)
getField讀取字段值
獲取數(shù)據(jù)表中的某個(gè)列的多個(gè)或者單個(gè)數(shù)據(jù),默認(rèn)情況下,當(dāng)只有一個(gè)字段的時(shí)候,返回滿足條件的數(shù)據(jù)表中的該字段的第一行的值。
$User = M("User"); // 實(shí)例化User對(duì)象
$nickname = $User->where('id=3')->getField('nickname');// 獲取ID為3的用戶的昵稱
需要返回整個(gè)列的數(shù)據(jù),加一個(gè)參數(shù)true。
$User->getField('id',true); // 獲取id數(shù)組
//返回?cái)?shù)據(jù)格式如array(1,2,3,4,5)一維數(shù)組,其中value就是id列的每行的值
如果傳入多個(gè)字段的話,默認(rèn)返回一個(gè)關(guān)聯(lián)數(shù)組。注意,即使缺少true參數(shù),返回的也是全部行數(shù)的數(shù)據(jù)
$User = M("User"); // 實(shí)例化User對(duì)象// 獲取所有用戶的ID和昵稱列表
$list = $User->getField('id,nickname');//兩個(gè)字段的情況下返回的是array(`id`=>`nickname`)的關(guān)聯(lián)數(shù)組。
getField方法還可以支持限制數(shù)量
$this->getField('id,name',5); // 限制返回5條記錄
$this->getField('id',3); // 獲取id數(shù)組 限制3條記錄
數(shù)據(jù)更新
save方法更新數(shù)據(jù)
$User = M("User"); // 實(shí)例化User對(duì)象
$data['name'] = 'ThinkPHP';
$data['email'] = 'ThinkPHP@gmail.com';
$User->where('id=5')->save($data); // 根據(jù)條件更新記錄
對(duì)象方式操作
$User = M("User"); // 實(shí)例化User對(duì)象
$User->name = 'ThinkPHP';
$User->email = 'ThinkPHP@gmail.com';
$User->where('id=5')->save(); // 根據(jù)條件更新記錄
注意:save方法的返回值是影響的記錄數(shù),如果返回false則表示更新出錯(cuò),因此一定要用恒等來(lái)判斷是否更新失敗。
如果id是數(shù)據(jù)表的主鍵的話,系統(tǒng)自動(dòng)會(huì)把主鍵的值作為更新條件來(lái)更新其他字段的值。
$User = M("User"); // 實(shí)例化User對(duì)象
$data['id'] = 5;
$data['name'] = 'ThinkPHP';
$data['email'] = 'ThinkPHP@gmail.com';
$User->save($data); // 根據(jù)條件保存修改的數(shù)據(jù)
更新字段
更新個(gè)別字段的值,可以使用setField方法。
$User = M("User"); // 實(shí)例化User對(duì)象
$User-> where('id=5')->setField('name','ThinkPHP');// 更改用戶的name值
setField方法支持同時(shí)更新多個(gè)字段,只需要傳入數(shù)組即可。
$User = M("User"); // 實(shí)例化User對(duì)象
$data = array('name'=>'ThinkPHP','email'=>'ThinkPHP@gmail.com');
$User-> where('id=5')->setField($data);// 更改用戶的name和email的值
統(tǒng)計(jì)字段(通常指的是數(shù)字類型)的更新,系統(tǒng)還提供了setInc和setDec方法。
$User = M("User"); // 實(shí)例化User對(duì)象
$User->where('id=5')->setInc('score',3); // 用戶的積分加3
$User->where('id=5')->setInc('score'); // 用戶的積分加1
$User->where('id=5')->setDec('score',5); // 用戶的積分減5
$User->where('id=5')->setDec('score'); // 用戶的積分減1
數(shù)據(jù)刪除
刪除一條數(shù)據(jù)
$User = M("User"); // 實(shí)例化User對(duì)象
$User->delete(5); // 刪除主鍵為5的用戶數(shù)據(jù)
delete方法可以刪除單個(gè)數(shù)據(jù),也可以刪除多個(gè)數(shù)據(jù),這取決于刪除條件。
$User = M("User"); // 實(shí)例化User對(duì)象
$User->where('id=5')->delete(); // 刪除id為5的用戶數(shù)據(jù)
$User->delete('1,2,5'); // 刪除主鍵為1,2和5的用戶數(shù)據(jù)
$User->where('status=0')->delete(); // 刪除所有狀態(tài)為0的用戶數(shù)據(jù)
為了避免錯(cuò)刪數(shù)據(jù),如果沒(méi)有傳入任何條件進(jìn)行刪除操作的話,不會(huì)執(zhí)行刪除操作
delete方法的返回值是刪除的記錄數(shù),如果返回值是false則表示SQL出錯(cuò),返回值如果為0表示沒(méi)有刪除任何數(shù)據(jù)。