日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

ThinkPHP3.1快速入门(2)数据CURD

發布時間:2025/3/21 php 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ThinkPHP3.1快速入门(2)数据CURD 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上一篇中,我們了解了ThinkPHP的基礎部分,以及如何創建一個控制器和模板,并知道了M方法的用法,本篇將會講解下數據的CURD操作,探索下更多的數據操作。?

CURD

CURD是一個數據庫技術中的縮寫詞,一般的項目開發的各種參數的基本功能都是CURD。它代表創建(Create)、更新(Update)、讀取(Read)和刪除(Delete)操作。CURD 定義了用于處理數據的基本原子操作。之所以將CURD 提升到一個技術難題的高度是因為完成一個涉及在多個數據庫系統中進行CURD操作的匯總相關的活動,其性能可能會隨數據關系的變化而有非常大的差異。
CURD在具體的應用中并非一定使用create、update 、read和delete字樣的方法,但是他們完成的功能是一致的。例如,ThinkPHP就是使用add、save、select和delete方法表示模型的CURD操作。

創建數據

大多數情況下,CURD的Create操作通常會通過表單來提交數據,首先,我們在項目的Tpl/Form 目錄下面創建一個add.html 模板文件,內容為:

<FORM method="post" action="__URL__/insert"> 標題:<INPUT type="text" name="title"><br/> 內容:<TEXTAREA name="content" rows="5" cols="45"></TEXTAREA><br/><INPUT type="submit" value="提交"></FORM>

然后,我們還需要在項目的Action目錄下面創建一個FormAction.class.php文件,暫時只需要定義FormAction類,不需要添加任何操作方法,代碼如下:

class FormAction extends Action{}

接下來,訪問

http://localhost/app/index.php/Form/add

就可以看到表單頁面了,我們并沒有在控制器里面定義add操作方法,但是很顯然,訪問是正常的。因為ThinkPHP在沒有找到對應操作方法的情況下,會檢查是否存在對應的模板文件,由于我們有對應的add模板文件,所以控制器就直接渲染該模板文件輸出了。所以說對于沒有任何實際邏輯的操作方法,我們只需要直接定義對應的模板文件就行了。
我們可以看到,在表單中定義了提交地址是到Form模塊的insert操作,為了處理表單提交數據,我們需要在FormAction類中添加insert操作方法,如下:

class FormAction extends Action{public function insert(){$Form = D('Form');if($Form->create()) {$result = $Form->add();if($result) {$this->success('操作成功!');}else{$this->error('寫入錯誤!');}}else{$this->error($Form->getError());}}}

如果你的主鍵是自增類型的話,add方法的返回值就是該主鍵的值。不是自增主鍵的話,返回值表示插入數據的個數。如果返回false則表示寫入出錯。

模型

為了方便測試,我們首先在數據庫中創建一個think_form表:

CREATE TABLE IF NOT EXISTS `think_form` (`id` smallint(4) unsigned NOT NULL AUTO_INCREMENT,`title` varchar(255) NOT NULL,`content` varchar(255) NOT NULL,`create_time` int(11) unsigned NOT NULL,PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;

我們在insert操作方法中用了D函數,和M函數不同,D函數需要有對應的模型類,下面我們就來創建模型類。模型類的定義規范是:
模型名+Model.class.php?(模型名的定義采用駝峰法并且首字母大寫)
我們在項目的Lib/Model 目錄下面創建FormModel.class.php文件,添加代碼如下:

class FormModel extends Model {// 定義自動驗證protected $_validate = array(array('title','require','標題必須'),);// 定義自動完成protected $_auto = array(array('create_time','time',1,'function'),);}

主要是用于表單的自動驗證和自動完成,具體用法我們會用另外的篇幅單獨講述,這里暫時先略過。我們只要了解的是,如果使用D函數實例化模型類,一般需要對應一個數據模型類,而且create方法會自動把表單提交的數據進行自動驗證和自動完成(如果有定義的話),如果自動驗證失敗,就可以通過模型的getError方法獲取驗證提示信息,如果驗證通過,就表示數據對象已經成功創建,但目前只是保存在內存中,直到我們調用add方法寫入數據到數據庫。這樣就完成了一個完整的Create操作,所以可以看到ThinkPHP在創建數據的過程中使用了兩步:
第一步,create方法創建數據對象,
第二步,使用add方法把當前的數據對象寫入數據庫。
當然,你完全可以跨過第一步,直接進行第二步,但是這樣的預處理有幾個優勢:
1、無論表單有多復雜,create方法都可以用一行代碼輕松創建數據對象;
2、在寫入數據之前,可以對數據進行驗證和補充;
其實create方法還有很多的功能操作,目的只有一個,確保寫入數據庫的數據安全和有效。
我們來驗證下表單提交的效果,當我們不輸入標題就直接提交表單的話,系統會給出標題必須這樣的提示信息。



當我們順利提交表單后,會看到寫入數據表的數據中的create_time字段已經有值了,這就是通過模型的自動完成寫入的。

如果你的數據完全是內部操作寫入而不是通過表單的話(也就是說可以充分信任數據的安全),那么可以直接使用add方法,如:

$Form = D('Form'); $data['title'] = 'ThinkPHP'; $data['content'] = '表單內容'; $Form->add($data);

也可以支持對象方式操作:

$Form = D('Form'); $Form->title = 'ThinkPHP'; $Form->content = '表單內容'; $Form->add();

對象方式操作的時候,add方法無需傳入數據,會自動識別當前的數據對象賦值。

讀取數據

當我們成功寫入數據后,就可以進行數據讀取操作了。在前面一篇中,我們已經知道可以用select方法獲取數據集,這里我們來通過find方法獲取一個單一數據,定義read操作方法如下:

public function read($id=0){$Form = M('Form');// 讀取數據$data = $Form->find($id);if($data) {$this->data = $data;// 模板變量賦值}else{$this->error('數據錯誤');}$this->display();}

read操作方法有一個參數$id,表示我們可以接受URL里面的id變量(后面我們會在變量章節詳細描述。這里之所以用M方法而沒有用D方法,是因為find方法是基礎模型類Model中的方法,所以沒有必要浪費開銷去實例化FormModel類(即使已經定義了FormModel類)。我們通常采用find方法讀取某個數據,這里使用了AR模式來操作,所以沒有傳入查詢條件,find($id) 表示讀取主鍵為$id值的數據,find方法的返回值是一個如下格式的數組:

array('id' => 5,'title' => '測試標題','content' => '測試內容','status' => 1,)

然后我們可以在模板中輸出數據,添加一個read模板文件,

<table><tr><td>id:</td><td>{$data.id}</td></tr><tr><td>標題:</td><td>{$data.title}</td></tr><tr><td>內容:</td><td>{$data.content}</td></tr></table>

完成后,我們就可以訪問

http://localhost/app/index.php/Form/read/id/1

來查看了。
如果你只需要查詢某個字段的值,還可以使用getField方法,例如:

$Form = M("Form"); // 獲取標題 $title = $Form->where('id=3')->getField('title');

上面的用法表示獲取id值為3的數據的title字段值。其實getField方法有很多用法,但是獲取某個字段的值是getField方法最常規的用法。
查詢操作是最常用的操作,尤其是涉及到復雜的查詢條件,我們會在查詢語言一章對查詢進行更加詳細的講解。

更新數據

在成功寫入并讀取數據之后,我們就可以對數據進行編輯操作了,首先我們添加一個編輯表單的模板文件edit.html,如下:

<FORM method="post" action="__URL__/update">標題:<INPUT type="text" name="title" value="{$vo.title}"><br/>內容:<TEXTAREA name="content" rows="5" cols="45">{$vo.content}</TEXTAREA><br/><INPUT type="hidden" name="id" value="{$vo.id}"><INPUT type="submit" value="提交"></FORM>

編輯模板不同于新增表單,需要對模板進行變量賦值,所以,我們這次需要在FormAction類添加兩個操作方法:

public function edit($id=0){$Form = M('Form');$this->vo = $Form->find($id);$this->display();}public function update(){$Form = D('Form');if($Form->create()) {$result = $Form->save();if($result) {$this->success('操作成功!');}else{$this->error('寫入錯誤!');}}else{$this->error($Form->getError());}}

完成后,我們就可以訪問

http://localhost/app/index.php/Form/edit/id/1

數據的更新操作在ThinkPHP使用save方法,可以看到,我們同樣可以使用create方法創建表單提交的數據,而save方法則會自動把當前的數據對象更新到數據庫,而更新的條件其實就是表的主鍵,這就是我們在編輯頁面要把主鍵的值作為隱藏字段一起提交的原因。
如果更新操作不依賴表單的提交的話,就可以寫成:

$Form = M("Form"); // 要修改的數據對象屬性賦值 $data['id'] = 5; $data['title'] = 'ThinkPHP'; $data['content'] = 'ThinkPHP3.1版本發布'; $Form->save($data); // 根據條件保存修改的數據

save方法會自動識別數據對象中的主鍵字段,并作為更新條件。當然,你也可以顯式的傳入更新條件:

$Form = M("Form"); // 要修改的數據對象屬性賦值 $data['title'] = 'ThinkPHP'; $data['content'] = 'ThinkPHP3.1版本發布'; $Form->where('id=5')->save($data); // 根據條件保存修改的數據

也可以改成對象方式來操作:

$Form = M("Form"); // 要修改的數據對象屬性賦值 $Form->title = 'ThinkPHP'; $Form->content = 'ThinkPHP3.1版本發布'; $Form->where('id=5')->save(); // 根據條件保存修改的數據

數據對象賦值的方式,save方法無需傳入數據,會自動識別。
save方法的返回值是影響的記錄數,如果返回false則表示更新出錯。

有些時候,我們只需要修改某個字段的值,就可以使用setField方法,而不需要每次都調用save方法。

$Form = M("Form"); // 更改title值 $Form->where('id=5')->setField('title','ThinkPHP');

對于統計字段,系統還提供了更加方便的setInc和setDec方法。
例如:

$User = M("User"); // 實例化User對象$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

刪除數據

刪除數據很簡單,只需要調用delete方法,例如:

$Form = M('Form'); $Form->delete(5);

表示刪除主鍵為5的數據,delete方法可以刪除單個數據,也可以刪除多個數據,這取決于刪除條件,例如:

$User = M("User"); // 實例化User對象 $User->where('id=5')->delete(); // 刪除id為5的用戶數據 $User->delete('1,2,5'); // 刪除主鍵為1,2和5的用戶數據 $User->where('status=0')->delete(); // 刪除所有狀態為0的用戶數據

delete方法的返回值是刪除的記錄數,如果返回值是false則表示SQL出錯,返回值如果為0表示沒有刪除任何數據。

總結

現在,你已經基本掌握了ThinkPHP的CURD操作了,并且學會了使用ThinkPHP的create、add、save和delete方法,還有兩個對字段操作的getField和setField方法。下一篇,我們會更深入的了解下如何使用ThinkPHP提供的查詢語言。

?

via:http://www.thinkphp.cn/document/101.html

總結

以上是生活随笔為你收集整理的ThinkPHP3.1快速入门(2)数据CURD的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产大片黄 | 少妇高潮一区二区三区99刮毛 | 国内精品福利视频 | 五月天男人天堂 | 97人妻精品一区二区 | 在线观看h视频 | 亚洲午夜小视频 | www中文字幕在线观看 | 91日本在线 | 亚洲国产精品99久久久久久久久 | 色图一区 | av在线入口 | 亚洲国产成人精品久久 | 人人妻人人澡人人爽精品日本 | 91免费在线播放 | 久久无码高潮喷水 | 96精品| 国产成人三级一区二区在线观看一 | 婷婷麻豆| 成人免费高清 | 精品国产一级 | 精品视频网 | 国产一级做a爱片久久毛片a | 欧美一级片免费观看 | 91操操操| 成人中文在线 | 好看的av网址| 久久99久久99精品蜜柚传媒 | 男生和女生一起差差差视频 | 成人片在线视频 | 自拍偷在线精品自拍偷无码专区 | 伊人春色网 | 91成人破解版 | 香蕉久久夜色精品国产使用方法 | 国产夫妻在线 | 夜夜操网 | 黄色精品 | 国产精品视频导航 | 欧美中日韩在线 | 四季av一区二区夜夜嗨 | 国产99对白在线播放 | 久久av网址 | 久久久久久久久久久91 | 激情深爱五月 | 亚洲网站在线播放 | 一级特黄性色生活片 | 午夜啪啪网 | 男女草逼视频 | 国产在线视频卡一卡二 | 一本无码aⅴ久久久国产 | 欧美婷婷六月丁香综合色 | 国产美女视频一区 | 超碰黑丝| www.狠狠| 青青草手机在线视频 | av私库| 99国产视频在线 | 99久久久无码国产精品免费蜜柚 | 牛牛精品一区二区 | 麻豆成人久久精品一区二区三区 | 91丨porny丨成人蝌蚪 | 欧美精品乱码99久久蜜桃 | 熟女人妻一区二区三区免费看 | 成人h在线| 中文一二三区 | 干干操操| 亚洲一区二区三区乱码 | 久久国产视频网站 | 免费观看的毛片 | 国产精品ⅴa有声小说 | 一本大道东京热无码 | 亚洲精品在线中文字幕 | h片免费网站 | 成人精品亚洲人成在线 | 色婷婷九月 | 四虎久久 | 国产精品亚洲а∨天堂免在线 | 日本91网站 | 在线观看你懂的网站 | 北条麻妃青青久久 | 人人妻人人藻人人爽欧美一区 | 国产成人免费av | 黄色免费网站观看 | 高清不卡一区二区三区 | 国产精品免费看久久久无码 | 95久久| 四虎影院在线免费播放 | 日本h漫在线观看 | 久久成人精品一区二区 | 你懂的在线播放 | 欧美一区二区免费在线观看 | 国产精品视频入口 | 国产女主播在线一区二区 | 色狠狠综合网 | 精品人妻无码一区二区三区 | 国产亚洲精品电影 | 草视频在线 | 毛片在线免费观看视频 | 天天视频天天爽 |