thinkphp3.1框架中的案例blog,添加日記的同時能夠添加標籤tag,但僅此而已。當刪除日記時,標籤並無被刪除掉,從而形成
think_tagged表和think_tag累積了垃圾數據。爲了實現刪除日記的同時也一塊兒清理掉think_tagged表和think_tag那些過期的數據,
我寫了一個函數,在看下面函數時,要先弄清think_tagged表、think_tag和think_blog表的關聯關係。php
函數以下:html
public function deltag($recordId){ $condition['recordId'] = $recordId;//獲取日記的ID $tagged=M('Tagged'); $taggedlist= $tagged->where($condition)->select();//這裏用select而不用find,由於一篇日記可能有多個標籤 $taggedids=array();//聲明一個數組,用來裝think_tagged表的ID $tagIds=array();//聲明一個數組,用來裝think_tag表的ID foreach ($taggedlist as $key => $value) { $tagIds[]=$value['tagId'];//獲取think_tag表的ID $taggedids[]=$value['id'];//獲取think_tagged表的ID } //考慮到一篇日記可能有多個標籤,因此這裏對$tagIds做一下遍歷 foreach ($tagIds as $tagIdk => $tagIdv) { $tagId=$tagIdv; $tag=D('Tag'); $tagvo=$tag->where('id='.$tagId)->find();//獲取每一個$tagId對應的一條記錄 $count=intval($tagvo['count']);//獲取標籤的數量 if($count==1){//若是$count==1,說明這個標籤僅有這篇日記全部,刪掉。 $tag->where('id='.$tagId)->delete(); }elseif($count > 1){//$count > 1,說明這個標籤爲多篇日記全部,不能刪除,因此減1。 $tag->where('id='.$tagId)->setDec('count',1);//setDec使$count減1,注意thinkphp3.1的使用方法。 } } //下面是刪除日記存在think_tagged表裏的相關數據 foreach ($taggedids as $taggedid_k => $taggedid_v) { $tagged->where('id='.$taggedid_v)->delete(); } }
函數寫好了,怎麼使用呢?方法很簡單。
咱們來看一下刪除日記的函數web
public function delete() { //刪除指定記錄 $model = M("Blog"); if (!empty($model)) { $id = $_REQUEST[$model->getPk()]; if (isset($id)) { if ($model->where("id=" . $id)->delete()) { if ($this->__get('ajax')) { $this->ajaxReturn($id, L('_DELETE_SUCCESS_'), 1); } else { $this->success(L('_DELETE_SUCCESS_')); } } else { $this->error(L('_DELETE_FAIL_')); } } else { $this->error(L('_ERROR_ACTION_')); } } }
這個函數是放在Examples\Blog\Lib\Action\PublicAction.class.php這個公共類裏的,
BlogAction.class.php類繼承了其刪除函數,咱們就把deltag($recordId)函數放在delete() 裏調用,以下:
ajax
public function delete() { //刪除指定記錄 $model = M("Blog"); if (!empty($model)) { $id = $_REQUEST[$model->getPk()]; if (isset($id)) { $recordId=$id; $this->deltag($recordId); if ($model->where("id=" . $id)->delete()) { if ($this->__get('ajax')) { $this->ajaxReturn($id, L('_DELETE_SUCCESS_'), 1); } else { $this->success(L('_DELETE_SUCCESS_')); } } else { $this->error(L('_DELETE_FAIL_')); } } else { $this->error(L('_ERROR_ACTION_')); } } }
以上只適用刪除單條日記的狀況,固然如要批量刪除日記,只要遍歷刪除blog的ID同時調用一下deltag($recordId)就OK了。
thinkphp
本文首發WBlog博客,歡迎轉載!轉載請註明本文地址,謝謝。 數組
本文地址:http://www.w3note.com/web/12.html 框架