彻底删除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 相关文章推荐
URL Rewrite的设置方法
Jan 02 PHP
Linux下 php5 MySQL5 Apache2 phpMyAdmin ZendOptimizer安装与配置[图文]
Nov 18 PHP
php 各种应用乱码问题的解决方法
May 09 PHP
php中用数组的方法设置cookies
Apr 21 PHP
linux系统上支持php的 iconv()函数的方法
Oct 01 PHP
php实现只保留mysql中最新1000条记录
Jun 18 PHP
摘自织梦CMS中的图片处理类
Aug 08 PHP
Yii数据库缓存实例分析
Mar 29 PHP
Yii+MYSQL锁表防止并发情况下重复数据的方法
Jul 14 PHP
php中Redis的应用--消息传递
Mar 28 PHP
微信公众号实现会员卡领取功能
Jun 08 PHP
深入浅析安装PhpStorm并激活的步骤详解
Sep 17 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伪造referer突破网盘禁止外连的代码
2008/06/15 PHP
PHP+JQuery+Ajax实现分页方法详解
2016/08/06 PHP
php获取ajax的headers方法与内容实例
2017/12/27 PHP
关于Anemometer图形化显示MySQL慢日志的工具搭建及使用的详细介绍
2020/07/13 PHP
jQuery 相关控件的事件操作分解
2009/08/03 Javascript
js 控制页面跳转的5种方法
2013/09/09 Javascript
jQuery调用RESTful WCF示例代码(GET方法/POST方法)
2014/01/26 Javascript
判断JS对象是否拥有某属性的方法推荐
2016/05/12 Javascript
JQuery异步提交表单与文件上传功能示例
2017/01/12 Javascript
详解VueJs前后端分离跨域问题
2017/05/24 Javascript
vue2.0 循环遍历加载不同图片的方法
2018/03/06 Javascript
Angular父组件调用子组件的方法
2018/04/02 Javascript
使用vuex的state状态对象的5种方式
2018/04/19 Javascript
JS开发常用工具函数(小结)
2019/07/04 Javascript
React 父子组件通信的实现方法
2019/12/05 Javascript
用Python代码来解图片迷宫的方法整理
2015/04/02 Python
Python中基础的socket编程实战攻略
2016/06/01 Python
Pycharm学习教程(1) 定制外观
2017/05/02 Python
用python实现百度翻译的示例代码
2018/03/09 Python
python 计算两个列表的相关系数的实现
2019/08/29 Python
Python绘图实现显示中文
2019/12/04 Python
python 使用opencv 把视频分割成图片示例
2019/12/12 Python
Python基于类路径字符串获取静态属性
2020/03/12 Python
Django 解决阿里云部署同步数据库报错的问题
2020/05/14 Python
基于python纯函数实现井字棋游戏
2020/05/27 Python
python如何支持并发方法详解
2020/07/25 Python
详解Pycharm安装及Django安装配置指南
2020/09/15 Python
python 用opencv实现霍夫线变换
2020/11/27 Python
HTML5安全介绍之内容安全策略(CSP)简介
2012/07/10 HTML / CSS
Molton Brown美国官网:奢华美容、香水、沐浴和身体护理
2020/09/02 全球购物
竞选班长演讲稿500字
2014/08/22 职场文书
计算机实训报告总结
2014/11/05 职场文书
学习委员竞选稿
2015/11/20 职场文书
MySQL事务操作的四大特性以及并发事务问题
2022/04/12 MySQL
Win11显卡控制面板打开显卡设置方法
2022/04/20 数码科技
python开发制作好看的时钟效果
2022/05/02 Python