ThinkPHP3.2-CURD操作

數(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ù)。

本文介紹基本來(lái)自官方文檔,如有疑問(wèn),參見(jiàn)ThinkPHP官方文檔CURD操作

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,551評(píng)論 19 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,670評(píng)論 18 399
  • 第一部分 克服天性中的選擇弱勢(shì) 選擇太多怎么辦? 1.1.1管理學(xué)和心理學(xué)大師詹姆斯·馬奇認(rèn)為,我們一般人在做抉擇...
    楊秀兵閱讀 185評(píng)論 0 0
  • 難怪人總說(shuō):老人像小孩…… 人老了,會(huì)像孩時(shí)般碰碰撞撞…… 不同的是,孩時(shí)有父母護(hù)著;老了,福氣好的有兒孫...
    Gloria淡然閱讀 121評(píng)論 1 1
  • 在裊裊的煙霧兩端 幻與實(shí)在交換 我看佛祖如虛幻 料佛祖看我 也作如是觀 暗紅的香火明滅間 像是在眨眼 那裊裊的煙 ...
    梁小溝閱讀 366評(píng)論 3 2

友情鏈接更多精彩內(nèi)容