天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

ThinkPHP3.1數(shù)據(jù)CURD操作快速入門

1.CURD概述:

CURD是一個數(shù)據(jù)庫技術(shù)中的縮寫詞,一般的項目開發(fā)的各種參數(shù)的基本功能都是CURD。它代表創(chuàng)建(Create)、更新(Update)、讀取(Read)和刪除(Delete)操作。CURD 定義了用于處理數(shù)據(jù)的基本原子操作。之所以將CURD提升到一個技術(shù)難題的高度是因為完成一個涉及在多個數(shù)據(jù)庫系統(tǒng)中進行CURD操作的匯總相關(guān)的活動,其性能可能會隨數(shù)據(jù)關(guān)系的變化而有非常大的差異。

CURD在具體的應(yīng)用中并非一定使用create、update、read和delete字樣的方法,但是他們完成的功能是一致的。例如,Thinkphp就是使用add、save、select和delete方法表示模型的CURD操作。

2.創(chuàng)建數(shù)據(jù)

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

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

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

class FormAction extends Action{ }

接下來,訪問:

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

就可以看到表單頁面了,我們并沒有在控制器里面定義add操作方法,但是很顯然,訪問是正常的。因為Thinkphp在沒有找到對應(yīng)操作方法的情況下,會檢查是否存在對應(yīng)的模板文件,由于我們有對應(yīng)的add模板文件,所以控制器就直接渲染該模板文件輸出了。所以說對于沒有任何實際邏輯的操作方法,我們只需要直接定義對應(yīng)的模板文件就行了。
我們可以看到,在表單中定義了提交地址是到Form模塊的insert操作,為了處理表單提交數(shù)據(jù),我們需要在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方法的返回值就是該主鍵的值。不是自增主鍵的話,返回值表示插入數(shù)據(jù)的個數(shù)。如果返回false則表示寫入出錯。

3.模型

為了方便測試,我們首先在數(shù)據(jù)庫中創(chuàng)建一個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函數(shù),和M函數(shù)不同,D函數(shù)需要有對應(yīng)的模型類,下面我們就來創(chuàng)建模型類。模型類的定義規(guī)范是:
模型名+Model.class.php (模型名的定義采用駝峰法并且首字母大寫)
我們在項目的Lib/Model 目錄下面創(chuàng)建FormModel.class.php文件,添加代碼如下:

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

主要是用于表單的自動驗證和自動完成,具體用法我們會用另外的篇幅單獨講述,這里暫時先略過。我們只要了解的是,如果使用D函數(shù)實例化模型類,一般需要對應(yīng)一個數(shù)據(jù)模型類,而且create方法會自動把表單提交的數(shù)據(jù)進行自動驗證和自動完成(如果有定義的話),如果自動驗證失敗,就可以通過模型的getError方法獲取驗證提示信息,如果驗證通過,就表示數(shù)據(jù)對象已經(jīng)成功創(chuàng)建,但目前只是保存在內(nèi)存中,直到我們調(diào)用add方法寫入數(shù)據(jù)到數(shù)據(jù)庫。這樣就完成了一個完整的Create操作,所以可以看到Thinkphp在創(chuàng)建數(shù)據(jù)的過程中使用了兩步:

第一步,create方法創(chuàng)建數(shù)據(jù)對象,
第二步,使用add方法把當前的數(shù)據(jù)對象寫入數(shù)據(jù)庫。

當然,你完全可以跨過第一步,直接進行第二步,但是這樣的預(yù)處理有幾個優(yōu)勢:

1、無論表單有多復(fù)雜,create方法都可以用一行代碼輕松創(chuàng)建數(shù)據(jù)對象;
2、在寫入數(shù)據(jù)之前,可以對數(shù)據(jù)進行驗證和補充;
其實create方法還有很多的功能操作,目的只有一個,確保寫入數(shù)據(jù)庫的數(shù)據(jù)安全和有效。

我們來驗證下表單提交的效果,當我們不輸入標題就直接提交表單的話,系統(tǒng)會給出標題必須這樣的提示信息。
當我們順利提交表單后,會看到寫入數(shù)據(jù)表的數(shù)據(jù)中的create_time字段已經(jīng)有值了,這就是通過模型的自動完成寫入的。

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

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

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

$Form  =  D('Form');$Form->title =  'Thinkphp';$Form->content  =  '表單內(nèi)容';$Form->add();

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

4.讀取數(shù)據(jù)

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

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

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

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

然后我們可以在模板中輸出數(shù)據(jù),添加一個read模板文件:

<table> <tr>  <td>id:</td>  <td>{$data.id}</td> </tr> <tr>  <td>標題:</td>  <td>{$data.title}</td> </tr> <tr>  <td>內(nèi)容:</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的數(shù)據(jù)的title字段值。其實getField方法有很多用法,但是獲取某個字段的值是getField方法最常規(guī)的用法。
查詢操作是最常用的操作,尤其是涉及到復(fù)雜的查詢條件,我們會在查詢語言一章對查詢進行更加詳細的講解。

5.更新數(shù)據(jù)

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

 <FORM method="post" action="__URL__/update">  標題:<INPUT type="text" name="title" value="{$vo.title}"><br/>  內(nèi)容:<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


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

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

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

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

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

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

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

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

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

對于統(tǒng)計字段,系統(tǒng)還提供了更加方便的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


6.刪除數(shù)據(jù)

刪除數(shù)據(jù)很簡單,只需要調(diào)用delete方法,例如:

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

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

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

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

php技術(shù)ThinkPHP3.1數(shù)據(jù)CURD操作快速入門,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: yellow视频免费观看 | 国产精品一久久香蕉国产线看 | 欧美亚洲天堂网 | 中国hdxxxx医院护士 | 美女打开双腿扒开屁股男生 | 国产人妻麻豆蜜桃色在线 | 超碰人热人人热人人看 | 美女被j进去动态 | 午夜dj影院视频观看 | 国产久爱青草视频在线观看 | 少妇高潮A视频 | 99久久伊人一区二区yy5099 | 捆绑白丝粉色JK震动捧喷白浆 | 亚洲看片无码免费视频 | 青青伊人网| 亚洲国产精品嫩草影院永久 | 无码137片内射在线影院 | 欧美色图一区二区三区 | 欧美Av无码高清在线 | 手机在线免费看毛片 | 99热.com| 和老外3p爽粗大免费视频 | 特级做A爰片毛片免费69 | 午夜向日葵高清在线观看 | 亚洲妈妈精品一区二区三区 | 久久热在线视频精品店 | 欲奴第一季在线观看全集 | 92电影网午夜福利 | 国产精品麻豆高潮刺激A片 国产精品麻豆a在线播放 | 在线观看精品视频看看播放 | 国产呦精品一区二区三区网站 | 国产女人乱人伦精品一区二区 | 亚洲 欧美 视频 手机在线 | 欧美xxxx83d | 一区两区三不卡 | 欧美成人亚洲高清在线观看 | 亚洲欧洲日产国码中学 | 桃花色影院 | 色聚网久久综合 | 福利视频一二三在线观看 | 99久久99久久久精品齐齐鬼色 |