彻底删除thinkphp3.1案例blog标签的方法


Posted in PHP onDecember 05, 2014

本文实例讲述了彻底删除thinkphp3.1案例blog标签的方法。分享给大家供大家参考。具体方法如下:

thinkphp3.1框架中的案例blog,添加日记的同时可以添加标签tag,但仅此而已。当删除日记时,标签并没有被删除掉,从而造成think_tagged表和think_tag累积了垃圾数据。为了实现删除日记的同时也一起清理掉think_tagged表和think_tag那些过时的数据,我写了一个函数,在看下面函数时,要先弄清think_tagged表、think_tag和think_blog表的关联关系。

函数如下:

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(); 

                    

    } 

}

函数写好了,怎么使用呢?方法很简单。
我们来看一下删除日记的函数

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() 里调用,如下:

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框架的PHP程序设计有所帮助。

PHP 相关文章推荐
一个用于mysql的数据库抽象层函数库
Oct 09 PHP
php 传值赋值与引用赋值的区别
Dec 29 PHP
深入php处理整数函数的详解
Jun 09 PHP
php数组编码转换示例详解
Mar 11 PHP
thinkphp3.2.2实现生成多张缩略图的方法
Dec 19 PHP
php给每个段落添加空格的方法
Mar 20 PHP
php自定义分页类完整实例
Dec 25 PHP
php实现在线通讯录功能(附源码)
May 13 PHP
php简单计算年龄的方法(周岁与虚岁)
Dec 06 PHP
PHP最常用的正则表达式
Feb 13 PHP
PHP Post获取不到非表单数据的问题解决办法
Feb 27 PHP
详解使用php-cs-fixer格式化代码
Sep 16 PHP
php树型类实例
Dec 05 #PHP
Yii框架form表单用法实例
Dec 04 #PHP
Yii不依赖Model的表单生成器用法实例
Dec 04 #PHP
Yii分页用法实例详解
Dec 04 #PHP
Yii配置文件用法详解
Dec 04 #PHP
yii实现图片上传及缩略图生成的方法
Dec 04 #PHP
Dwz与thinkphp整合下的数据导出到Excel实例
Dec 04 #PHP
You might like
PHP+SQL 注入攻击的技术实现以及预防办法
2011/01/27 PHP
php中数据库连接方式pdo和mysqli对比分析
2015/02/25 PHP
php类自动加载器实现方法
2015/07/28 PHP
详解cookie验证的php应用的一种SSO解决办法
2017/10/20 PHP
CI框架附属类用法分析
2018/12/26 PHP
Ajax一统天下之Dojo整合篇
2007/03/24 Javascript
使用jQuery Ajax功能时需要注意的一个问题(内存溢出)
2012/05/30 Javascript
js 获取(接收)地址栏参数值的方法
2013/04/01 Javascript
鼠标焦点离开文本框时验证的js代码
2013/07/19 Javascript
javascript获取选中的文本的方法代码
2013/10/30 Javascript
JavaScript也谈内存优化
2014/06/06 Javascript
在JavaScript中处理字符串之fontcolor()方法的使用
2015/06/08 Javascript
jquery点击缩略图切换视频播放特效代码分享
2015/09/15 Javascript
JS中创建函数的三种方式及区别
2016/03/13 Javascript
一起学写js Calender日历控件
2016/04/14 Javascript
javascript实现列表切换效果
2016/05/02 Javascript
JavaScript必看小技巧(必看)
2016/06/07 Javascript
JS实现的RGB网页颜色在线取色器完整实例
2016/12/21 Javascript
js实现添加删除表格(两种方法)
2017/04/27 Javascript
vue-router 权限控制的示例代码
2017/09/21 Javascript
node前端模板引擎Jade之标签的基本写法
2018/05/11 Javascript
JS+HTML5实现获取手机验证码倒计时按钮
2018/08/08 Javascript
JS实现图片轮播效果实例详解【可自动和手动】
2019/04/04 Javascript
JS几个常用的函数和对象定义与用法示例
2020/01/15 Javascript
[29:10]Ti4 冒泡赛第二天 NEWBEE vs Titan 3
2014/07/15 DOTA
[22:20]初生之犊-TI4第5名LGD战队纪录片
2014/08/13 DOTA
Python实现Linux中的du命令
2017/06/12 Python
解析Python3中的Import
2019/10/13 Python
8段用于数据清洗Python代码(小结)
2019/10/31 Python
python实现简易淘宝购物
2019/11/22 Python
Python opencv相机标定实现原理及步骤详解
2020/04/09 Python
解析HTML5的存储功能和web SQL的相关操作方法
2016/02/19 HTML / CSS
学校搬迁方案
2014/06/15 职场文书
领导干部民主生活会自我剖析材料范文
2014/09/20 职场文书
嘉宾邀请函
2015/01/31 职场文书
观看《筑梦中国》纪录片心得体会
2016/01/18 职场文书