彻底删除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 相关文章推荐
PHP FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)
Jul 23 PHP
PHP 年龄计算函数(精确到天)
Jun 07 PHP
通过缓存数据库结果提高PHP性能的原理介绍
Sep 05 PHP
php创建sprite
Feb 11 PHP
php把数据表导出为Excel表的最简单、最快的方法(不用插件)
May 10 PHP
php实现从上传文件创建缩略图的方法
Apr 02 PHP
php HTML无刷新提交表单
Apr 05 PHP
PHP购物车类Cart.class.php定义与用法示例
Jul 20 PHP
PHP搭建大文件切割分块上传功能示例
Jan 04 PHP
PHP PDO操作MySQL基础教程
Jun 05 PHP
Laravel框架搜索分页功能示例
Feb 01 PHP
Thinkphp5框架中引入Markdown编辑器操作示例
Jun 03 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
在apache下限制每个虚拟主机的并发数!!!!
2006/10/09 PHP
ExtJS 入门
2010/10/29 Javascript
JQuery打造省市下拉框联动效果
2014/05/18 Javascript
JavaScript实现可拖拽的拖动层Div实例
2015/08/05 Javascript
JavaScript程序开发之JS代码放置的位置
2016/01/15 Javascript
同步文本框内容JS代码实现
2016/08/04 Javascript
关于Vue.js 2.0的Vuex 2.0 你需要更新的知识库
2016/11/30 Javascript
vue分类筛选filter方法简单实例
2017/03/30 Javascript
使用store来优化React组件的方法
2017/10/23 Javascript
JS实现简单省市二级联动
2019/11/27 Javascript
仿照Element-ui实现一个简易的$message方法
2020/09/14 Javascript
ant design 日期格式化的实现
2020/10/27 Javascript
Vue时间轴 vue-light-timeline的用法说明
2020/10/29 Javascript
Python中顺序表的实现简单代码分享
2018/01/09 Python
Flask-Mail用法实例分析
2018/07/21 Python
python 将列表中的字符串连接成一个长路径的方法
2018/10/23 Python
python实现一组典型数据格式转换
2018/12/15 Python
python实现输入的数据在地图上生成热力图效果
2019/12/06 Python
如何使用python代码操作git代码
2020/02/29 Python
Python datetime 格式化 明天,昨天实例
2020/03/02 Python
使用Python获取当前工作目录和执行命令的位置
2020/03/09 Python
python使用信号量动态更新配置文件的操作
2020/04/01 Python
用 Python 制作地球仪的方法
2020/04/24 Python
python 数据分析实现长宽格式的转换
2020/05/18 Python
详解如何在css中引入自定义字体(font-face)
2018/05/17 HTML / CSS
德国综合购物网站:OTTO
2018/11/13 全球购物
台湾租车首选品牌:IWS艾维士租车
2019/05/03 全球购物
英国健身专家:WIT Fitness
2021/02/09 全球购物
学生干部培训方案
2014/06/12 职场文书
2014年商场国庆节活动策划方案
2014/09/16 职场文书
入股协议书范本
2014/11/01 职场文书
2015年话务员工作总结
2015/04/29 职场文书
2015年秋季运动会广播稿
2015/08/19 职场文书
读《茶花女》有感:山茶花的盛开与凋零
2020/01/17 职场文书
如何解决goland,idea全局搜索快捷键失效问题
2022/04/03 Golang
古见同学有交流障碍症 第二季宣传CM公开播出
2022/04/11 日漫