Thinkphp編程中幾種常見的實用技巧講解
1. getField
getField的方便之處在於可以獲取一個值,一個數組,或者一組鍵值對。
接下來舉三個例子簡單說明。
A. 獲取一個值。
在修改密碼的方法中,要驗證舊密碼是否匹配。現已知用戶id為$uid。
則$old_pass = $Model->where(“uid=’$uid’”)->getField(‘password’);
即可獲取舊密碼來進行驗證。
B. 獲取一個數組
如果一級分類下有二級分類,現在給出一級分類,要求搜索到一級分類下的所有產品。
解決方法就是首先獲得所有的二級分類ID,這時候用getField是非常方便的。
$arr_types = $Model->where(“pid=’$type_id’”)->getField(‘id’,true);
$map[‘type_id’] = array(‘in’,$arr_types);
$products = M(‘product’)->where($map)->select();
這樣就獲取到了這個一級分類下的所有產品,該方法僅限二級分類,如果有三級分類請用其他方法解決。
C. 獲取一組鍵值對
鑒於水平有限,目前主要用於關聯查詢的信息展示中,可以在一定程度上給數據庫減壓。
比如要展示一個用戶的購物車,然而從購物車表中僅僅能查到商品的ID,但我想要展示商品的名字。這時候從商品表中獲取一組鍵值對即可解決這個問題。
$arr_product = $Model->getField(‘id,product_name’,true);
輸出的時候,對應商品的名字為$arr_product[$product_id];
當然,用join也能解決這個問題。
2. page
顧名思義,這是thinkphp封裝好的一個分頁類,用起來非常方便。不同版本用法不同,詳細用法可以查看手冊。這裏要講的是一個終極解決方案。無論哪個版本,甚至是原生的php都可以解決分頁問題。
假設要分頁的結果是$product_list(數據類型array)。
當前頁碼:$page = I(‘page’)?I(‘page’):1;
每頁信息條數:$per_page = 10;
獲得分頁結果:$product_list = array_slice($product_list,($page-1)* $per_page, $per_page);
Array_slice參數:數組名,起始位置(0開始),分割的數量。
3. setField
有時候需要改變一組數據中或一類數據中的某個字段,這時候用save方法有點大材小用。
比如我只需要修改一個狀態值,將某個或某類的status值修改為1,表示可用。
$Model->where($map)->setField(‘status’,1);
如果同時我想把修改時間也記錄下來怎麽辦。
$data[‘status’] = 1;
$data[‘edittime’] = time();
$Model->where($map)->setField($data);
setField可以修改一個字段,也可以修改多個字段。
4. setInc、setdec
SetInc,常用來統計閱讀量點擊量。每次請求文章的時候,只需要:
$Model->where(“id=’$id’”)->setInc(‘readnum’);
默認增加1,也可以自定義。詳細用法可以看手冊。
Setdec用法一樣。
5. 後臺有關於添加、編輯一類控制器的技巧
做後臺開發的都知道,添加一條數據需要用兩個控制器,一個用來展示頁面,另一個用來操作,其實兩個控制器可以合二為一的。現在已添加為例:
常規寫法:
Public function addproduct(){
$this->display();
}
Public function do_addproduct(){
$Model = M(‘product’);
$data = array(
‘name’ => I(‘name’),
‘price’ => I(‘price’),
……
);
$result = $Model->add($data);
If($result){
Success(‘添加成功’,U(‘product_list’));
}else{
Error(‘添加失敗’);
}
}
合二為一的寫法:
Public function addproduct(){
If(IS_POST){
$Model = M(‘product’);
$data = array(
‘name’ => I(‘name’),
‘price’ => I(‘price’),
……
);
$result = $Model->add($data);
If($result){
Success(‘添加成功’,U(‘product_list’));
}else{
Error(‘添加失敗’);
}
}else{
$this->display();
}
}
以上是添加一類的控制器的寫法,接下來同樣的思路,展示修改控制器的寫法。
Public function editproduct(){
$id = I(‘id’);
$Model = M(‘product’);
If(IS_POST){
$data = array(
‘id’ => $id,
‘name’ => I(‘name’),
‘price’ => I(‘price’),
……
‘addtime’=>time()
);
$result = $Model->save(‘data’);
If($result){
Success(‘修改成功’,U(‘product_list’));
}else{
Error(‘添加失敗’,U(‘editproduct’,array(‘id’=>$id)));
}
}else{
$this->info = $Model->find($id);
$this->display();
}
}
最後需要跟各位編程人員講解一些註意事項:
a.展示頁面的時候,id以input[hidden]形式展示,提交的時候一並提交上去,寫起來會輕松很多。
b.如果在$data數組中有主鍵存在,直接save方法即可。
c.為了避免沒有任何修改導致返回結果失敗的情況,加上時間即可解決。
合二為一的方法,最大的好處就是在模板中寫
表單的時候,action=”/Admin/Technology/edit/id/507.html”即可,十分方便。好了到這裏就為大家講完了,如果還是存在不理解的地方,那麽大家可以咨詢來尋求幫助。
本文由專業的鄭州app開發公司燚軒科技整理發布,原創不易,如需轉載請註明出處!
Thinkphp編程中幾種常見的實用技巧講解