給thinkphp案例blog的標籤添加個刪除方法

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 框架

相關文章
相關標籤/搜索