1. 程式人生 > >ThinkPHP框架中的CURD(更新中)的例項~~

ThinkPHP框架中的CURD(更新中)的例項~~

ThinkPHP提供了靈活和方便的資料操作方法,對資料庫操作的四個基本操作(CURD):建立、更新、讀取和刪除的實現是最基本的,也是必須掌握的,在這基礎之上才能熟悉更多實用的資料操作方法。CURD操作通常是可以和連貫操作配合完成的。下面來分析下各自的用法:

(下面的CURD操作我們均以M方法建立模型例項來說明,因為不涉及到具體的業務邏輯)

一、建立操作(Create)

在ThinkPHP中使用add方法新增資料到資料庫(而並不是create方法)。

add 寫入(新增)資料到資料庫

用法

add($data='',$options=array(),$replace=false)

引數

data(可選):要新增的資料,支援陣列和物件,如果留空取當前資料物件

options(可選):操作表示式,通常由連貫操作完成,預設為空陣列

replace(可選):是否允許寫入時更新,預設為false(個別資料庫支援)

回撥介面

寫入前 _before_insert(&$data,$options)

寫入成功 _after_insert($data,$options)

返回值

如果資料非法或者查詢錯誤則返回false

如果是自增主鍵 則返回主鍵值,否則返回1

相關方法

通常和data、create方法配合使用

使用示例如下:

$User = M("User"

);//例項化User物件

$data['name'] ='ThinkPHP';

$data['email'] ='[email protected]';

$User->add($data);

或者使用data方法連貫操作

$User->data($data)->add();

如果在add之前已經建立資料物件的話(例如使用了create或者data方法),add方法就不需要再傳入資料了。

使用create方法的例子:

$User = M("User");//例項化User物件

// 根據表單提交的POST資料建立資料物件

$User->create();

$User->add(); // 根據條件儲存修改的資料

如果你的主鍵是自動增長型別,並且如果插入資料成功的話,Add方法的返回值就是最新插入的主鍵值,可以直接獲取。

從2.1版開始恢復了批量插入資料的addAll方法(僅針對Mysql資料庫),如:

$User->addAll($data)

同時在資料插入時允許更新操作,add($data='',$options=array(),$replace=false)

其中Tadd方法增加$replace引數(是否新增資料時允許覆蓋),true表示覆蓋,預設為false

二、讀取資料(Read)

在ThinkPHP中讀取資料的方式很多,通常分為讀取資料和讀取資料集。

讀取資料集使用select方法(新版已經廢除原來的findall方法):

用法

select($options=array())

引數

options(可選):為陣列的時候表示操作表示式,通常由連貫操作完成;如果是數字或者字串,表示主鍵值。預設為空陣列。

回撥介面

查詢成功 _after_select(&$resultSet,$options)

返回值

查詢錯誤返回false

查詢結果為空返回null

查詢成功返回查詢的結果集(二維索引陣列)

相關方法

通常配合連貫操作where、field、order、limit、join等一起使用

使用示例:

$User = M("User");//例項化User物件

// 查詢status值為1的使用者資料 以建立時間排序 返回10條資料

$list = $User->where('status=1')->order('create_time')->limit(10)->select();

Select方法配合連貫操作方法可以完成複雜的資料查詢。而最複雜的連貫方法應該是where方法的使用,因為這部分涉及的內容較多,我們會在查詢語言部分就如何進行組裝查詢條件進行詳細的使用說明。基本的查詢暫時不涉及關聯查詢部分,而是統一採用關聯模型來進行資料操作,這一部分請參考關聯模型部分。

讀取資料使用find方法:

用法

find($options=array())

引數

options(可選):為陣列的時候表示操作表示式,通常由連貫操作完成;為數字或者字串的時候表示主鍵值。預設為空陣列。

回撥介面

查詢後 _after_find(&$result,$options)

返回值

如果查詢錯誤返回false

如果查詢結果為空返回null

如果查詢成功返回查詢的結果(索引陣列)

相關方法

通常配合連貫操作where、field、order、join等一起使用

讀取資料的操作其實和資料集的類似,select可用的所有連貫操作方法也都可以用於find方法,區別在於find方法最多隻會返回一條記錄,因此limit方法對於find查詢操作是無效的。

下面是一些查詢的例子:

$User = M("User");//例項化User物件

// 查詢status值為1name值為think的使用者資料

$User->where('status=1 AND name="think"')->find();

即使滿足條件的資料不止一條,find方法也只會返回第一條記錄。

如果要讀取某個欄位的值,可以使用getField方法,

用法

getField($field,$sepa=null)

引數

field(必須):要獲取的欄位字串(多個用逗號分隔)

sepa(可選):欄位資料間隔符號,如果是 NULL返回陣列為陣列。預設為null。

回撥介面

因為呼叫了select所以同select回撥介面

返回值

如果查詢結果為空返回null

如果field是一個欄位則返回該欄位的值

如果field是多個欄位,返回陣列。陣列的索引是第一個欄位的值,sepa為null則返回二維陣列。

相關方法

通常配合連貫操作where、limit、order等一起使用

示例如下:

$User = M("User");//例項化User物件

// 獲取ID為3的使用者的暱稱

$nickname = $User->where('id=3')->getField('nickname');

當只有一個欄位的時候,始終返回一個值。

如果傳入多個欄位的話,可以返回一個關聯陣列:

$User = M("User");//例項化User物件

// 獲取所有使用者的ID和暱稱列表

$list = $User->getField('id,nickname');

返回的list是一個數組,鍵名是使用者的id, 鍵值是使用者的暱稱nickname。

三、更新資料(Update)

在ThinkPHP中使用save方法更新資料庫,並且也支援連貫操作的使用。

用法

save($data='',$options=array())

引數

data:要儲存的資料,如果為空,則取當前的資料物件。

options:為陣列的時候表示操作表示式,通常由連貫操作完成;為數字或者字串的時候表示主鍵值。預設為空陣列。

回撥介面

更新前_before_update(&$data,$options)

更新成功後 _after_update($data,$options)

返回值

如果查詢錯誤或者資料非法返回false

如果更新成功返回影響的記錄數

相關方法

通常配合連貫操作where、field、order等一起使用

$User = M("User");//例項化User物件

// 要修改的資料物件屬性賦值

$data['name'] ='ThinkPHP';

$data['email'] ='[email protected]';

$User->where('id=5')->save($data); // 根據條件儲存修改的資料

為了保證資料庫的安全,避免出錯更新整個資料表,如果沒有任何更新條件,資料物件本身也不包含主鍵欄位的話,save方法不會更新任何資料庫的記錄。

因此下面的程式碼不會更改資料庫的任何記錄

$User->save($data);

除非使用下面的方式:

$User = M("User");//例項化User物件

// 要修改的資料物件屬性賦值

$data['id'] = 5;

$data['name'] ='ThinkPHP';

$data['email'] ='[email protected]';

$User->save($data); // 根據條件儲存修改的資料

如果id是資料表的主鍵的話,系統自動會把主鍵的值作為更新條件來更新其他欄位的值。

還有一種方法是通過create或者data方法建立要更新的資料物件,然後進行儲存操作,這樣save方法的引數可以不需要傳入。

$User = M("User");//例項化User物件

// 要修改的資料物件屬性賦值

$data['name'] ='ThinkPHP';

$data['email'] ='[email protected]';

$User->where('id=5')->data($data)->save(); // 根據條件儲存修改的資料

使用create方法的例子:

$User = M("User");//例項化User物件

// 根據表單提交的POST資料建立資料物件

$User->create();

$User->save(); // 根據條件儲存修改的資料

上面的情況,表單中必須包含一個以主鍵為名稱的隱藏域,才能完成儲存操作。

如果只是更新個別欄位的值,可以使用setField方法。

用法

setField($field,$value='')

引數

field:要更新的欄位名,如果是陣列,則表示更新多個欄位。

value:要更新的值,當field為陣列的時候value值無效。

返回值

如果查詢錯誤返回false

如果更新成功返回影響的記錄數

相關方法

必須配合連貫操作where一起使用

使用示例:

$User = M("User");//例項化User物件

// 更改使用者的name值

$User-> where('id=5')->setField('name','ThinkPHP');

setField方法支援同時更新多個欄位,只需要傳入陣列即可,例如:

$User = M("User");//例項化User物件

// 更改使用者的name和email的值

$data = array('name'=>'ThinkPHP','email'=>'[email protected]');

$User-> where('id=5')->setField($data);

而對於統計欄位(通常指的是數字型別)的更新,系統還提供了setInc和setDec方法。

用法

setInc($field,$step=1)欄位值增長

setDec($field,$step=1)欄位值減少

引數

field:要更新的欄位名。

step:增長或者減少的數值,預設為1。

返回值

如果查詢錯誤返回false

如果更新成功返回影響的記錄數

相關方法

必須配合連貫操作where一起使用

$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)

在ThinkPHP中使用delete方法刪除資料庫中的記錄。

用法

delete($options=array())

引數

options:為陣列的時候表示操作表示式,通常由連貫操作完成,如果沒有傳入任何刪除條件,則取當前資料物件的主鍵作為條件;為數字或者字串的時候表示主鍵值。預設為空陣列。

回撥介面

刪除成功後 _after_delete($data,$options)

返回值

如果查詢錯誤返回false

如果刪除成功返回影響的記錄數

相關方法

通常配合連貫操作where、field、order等一起使用

示例如下:

$User = M("User");//例項化User物件

$User->where('id=5')->delete(); // 刪除id為5的使用者資料

$User->where('status=0')->delete(); // 刪除所有狀態為0的使用者資料

delete方法可以用於刪除單個或者多個數據,主要取決於刪除條件,也就是where方法的引數,也可以用order和limit方法來限制要刪除的個數,例如:

// 刪除所有狀態為0的5 個使用者資料 按照建立時間排序

$User->where('status=0')->order('create_time')->limit('5')->delete();

相關推薦

ThinkPHP框架CURD更新例項~~

ThinkPHP提供了靈活和方便的資料操作方法,對資料庫操作的四個基本操作(CURD):建立、更新、讀取和刪除的實現是最基本的,也是必須掌握的,在這基礎之上才能熟悉更多實用的資料操作方法。CURD操作通常是可以和連貫操作配合完成的。下面來分析下各自的用法: (下面的CURD操作我們均以M方法建立模型例項來說

android框架、技術網站大全更新

android框架、技術網站大全附:謝謝建立、維護開發者的辛苦付出!一、網站掘金、CSDN、github、簡書、部落格園、雲棲社群、菜鳥教程、慕課網、極客導航、龍軒導航 等二、工具三、框架1、網路2、網

Scrapy框架使用過程可能出現的問題更新ing

在cmd中輸入Scrapy crawl mySpider,出現錯誤提示: Scrapy 1.3.0 - no active project Unknown command: crawl Use

redis 在Windows下的安裝及基本操作更新~~~

有用 redis 安裝 abc nbsp com inux eas pan 安裝目錄 Redis 安裝 Window 下安裝 下載地址:https://github.com/MSOpenTech/redis/releases。 Redis 支持 32 位和 64 位。這個需

《深入理解Java虛擬機:JVM高級屬性與最佳實踐》讀書筆記更新

pen 內存區域 深度 span 進化 ria 最短 描述 core 第一章:走進Java 概述 Java技術體系 Java發展史 Java虛擬機發展史 1996年 JDK1.0,出現Sun Classic VM HotSpot VM, 它是 Sun JDK 和 Open

python總結更新

註意 整數 元素 生成 更新 ron 外部 也會 mmu 1 python函數中的參數傳遞(註意可變和不可變傳遞) 可更改(mutable)與不可更改(immutable)對象 在 python 中,strings, tuples, 和 numbers 是不可更改的對象,而

linux常用命令匯總更新...

文本查看 ... lan 指定 編輯命令 顯示 查看文件內容 屏幕 一個 文本查看與編輯 1、文本編輯命令 vi/vim 2、查看文件內容命令 命令 說明 命令格式 參數 cat 將一個文件的內容連續輸出在屏幕上 cat [-option] 文件名 -n:將行號

Office 的各種小tips更新

pan lan tex 編號 裁剪 com 文獻 ffice text 1、Word 中打字輸入會擦掉之後原有字符,出現“吃字”的情況? 要將“改寫”切換為“插入”,最簡單的方法就是點擊鍵盤上小鍵

Vue-小demo、小效果 合集更新...

lin auto isa hover json () add ole bce (騰訊課堂學習小demo:https://ke.qq.com/course/256052) 一、簡單的指令應用 ——打擊滅火器 圖片素材點擊騰訊課堂的鏈接獲取 html: 1 &

網絡編程更新

體系 mis connect 這就是 網絡編程 只需要 能開 直接 組織 軟件開發架構 C/S架構 主從式架構 (英語:Client–server model) 也稱客戶端-服務器(Client/Server)架構、C/S架構,是一種網絡架構,它把客戶端 (Client)

藍橋杯單片機知識匯總更新

藍橋杯 del 轉換 art oat 進制 ecb 序列 數碼 藍橋杯知識匯總 1.數碼管 段碼顯示 uchar code display[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0

python算法合集更新。。。

最大 highlight body post python port pri 數論 bsp 一、數論算法 1.求兩數的最大公約數 import sys def gcd(p, q): if q == 0: return p return gcd(q, p%

蒟蒻的9個背包的浩大工程更新

無限 net 存在 定義 amount 詳細 多重背包 details 狀態轉移方程 所以說背包直接看dd大神的就好了,算了瞎寫寫吧。 0/1背包 有n件物品和一個容量為C的背包。第i件物品的重量是w[i],價值是v[i]。求解將哪些物品放入背包可使背包的

LNOI2018遊記更新

div 似的 clas 今天 style 大連 body 更新 高斯 立個flag不會退役。 Day 0: 水一發。 大連大學的鍵盤敲起來就跟敲紙似的。 膜拜要進隊的gqh,yxd,sjq。 (高斯消元,高原反應,分麾下治……)

軟件體系結構知識點總結更新

綁定 體系 ast taint structure 完整 延遲 維護 公式 軟件體系結構 公式 ? 體系架構=組件+連接件+約束 ? SoftwareArchitecture=Components+Connectors+Constra

好代碼是管出來的——淺談.Net Core的代碼管理方法與落地更新...

cor 分支 TP 功能 更新 ims 代碼規範 pull nbsp   軟件開發的目的是在規定成本和時間前提下,開發出具有適用性、有效性、可修改性、可靠性、可理解性、可維護性、可重用性、可移植性、可追蹤性、可互操作性和滿足用戶需求的軟件產品。   而對於整個開發過程來說

模板題大全更新

pan 主席樹 精度 lin 自動機 最小生成樹 生成樹 樹狀數組 數據 數據結構 堆 二叉查找樹 最小生成樹 樹狀數組 線段樹 主席樹 樹套樹 圓方樹 平衡樹 字符串 字典樹 KMP匹配 AC自動機 後綴自動機 圖論 Tarjan強連通分量 ——有向圖 ——無向圖

《視覺SLAM十四講》課後習題—ch7更新……

一個 main slam 為什麽 技術分享 .com span point fde 參考:https://blog.csdn.net/zilanpotou182/article/details/66478915(SIFT、SURF、ORB三種特征點的區別) 1.除了本書

InVEST模型工具下載及安裝更新

image 包含 美國 技術分享 lua alua pan 官網下載 bsp 寫論文需要用到InVEST模型,在網上搜了一下發現相關經驗並不多,這個工具已經出現很久,並且更新過多次,從2.6.0的ArcGIS模塊過渡到3.0.0的單機版,如今已到3.5.0。 隨意整理一下下

css布局 - 垂直居中布局的一百種實現方式更新...

設置 定位 輕松 學生 utf 字體大小調整 ack posit 改變 首先將垂直居中的現象和實現方式兩大方向細分類如下: 接下來逐條累加不同情況下的垂直居中實現。 目錄: 一、父元素高度固定時,單行文本 | 圖片的垂直居中 1. line-height行