ThinkPHP CURD

基本介紹

  • 中文名:ThinkPHP CURD
  • 對象:數據
  • 實質:數據
  • 範圍:電腦
CURD介紹,CURD分解,

CURD介紹

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

CURD分解

創建操作(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'] = 'ThinkPHP#gmail.c0m';
$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'] = 'ThinkPHP#gmail.c0m';
$User->where('id=5')->save($data); // 根據條件保存修改的數據
為了保證資料庫的安全,避免出錯更新整個數據表,如果沒有任何更新條件,數據對象本身也不包含主鍵欄位的話,save方法不會更新任何資料庫的記錄。
因此下面的代碼不會更改資料庫的任何記錄
$User->save($data);
除非使用下面的方式:
$User = M("User"); // 實例化User對象
// 要修改的數據對象屬性賦值
$data['id'] = 5;
$data['name'] = 'ThinkPHP';
$data['email'] = 'ThinkPHP#<cite class="highlight" highlight="true">gmail.c0m</cite>';
$User->save($data); // 根據條件保存修改的數據
如果id是數據表的主鍵的話,系統自動會把主鍵的值作為更新條件來更新其他欄位的值。
還有一種方法是通過create或者data方法創建要更新的數據對象,然後進行保存操作,這樣save方法的參數可以不需要傳入。
$User = M("User"); // 實例化User對象
// 要修改的數據對象屬性賦值
$data['name'] = 'ThinkPHP';
$data['email'] = 'ThinkPHP#gmail.c0m';
$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'=>'ThinkPHP@<cite class="highlight" highlight="true"><cite class="highlight" highlight="true" style="background-image: none; background-position: initial initial; background-repeat: initial initial; ">gmail.c0m</cite></cite>');
$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();
其他注意
文章中com中間字母使用數字0替代了,百科中不允許出現域名後綴

相關詞條

熱門詞條

聯絡我們