彻底删除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 session有效期问题
Apr 26 PHP
php下将多个数组合并成一个数组的方法与实例代码
Feb 03 PHP
php操作mysqli(示例代码)
Oct 28 PHP
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
Aug 04 PHP
php过滤表单提交的html等危险代码
Nov 03 PHP
php 数组随机取值的简单实例
May 23 PHP
PHP微信开发之根据用户回复关键词\位置返回附近信息
Jun 24 PHP
详谈symfony window下的安装 安装时候出现的问题以及解决方法
Sep 28 PHP
如何优雅的使用 laravel 的 validator验证方法
Nov 11 PHP
PHP实现的敏感词过滤方法示例
Mar 06 PHP
如何解决PHP获取不到SESSION信息之一般情况
Oct 10 PHP
PHP设计模式之外观模式(Facade)入门与应用详解
Dec 13 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获取字符串前几位的实例(substr返回字符串的子串用法)
2017/03/08 PHP
记录Yii2框架开发微信公众号遇到的问题及解决方法
2018/07/20 PHP
Mac下快速搭建PHP开发环境步骤详解
2019/05/05 PHP
PHP开启目录引索+fancyindex漂亮目录浏览带搜索功能
2019/09/23 PHP
JQuery困惑—包装集 DOM节点
2009/10/16 Javascript
细说浏览器特性检测(2)-通用事件检测
2010/11/05 Javascript
js中eval详解
2012/03/30 Javascript
如何在一个页面显示多个百度地图
2013/04/07 Javascript
javascript使用正则控制input输入框允许输入的值方法大全
2014/06/19 Javascript
AngularJS HTML编译器介绍
2014/12/06 Javascript
jQuery中hasClass()方法用法实例
2015/01/06 Javascript
谈谈基于iframe、FormData、FileReader三种无刷新上传文件的方法
2015/12/03 Javascript
node.js入门实例helloworld详解
2015/12/23 Javascript
jQuery实现的文字逐行向上间歇滚动效果示例
2017/09/06 jQuery
基于angular6.0实现的一个组件懒加载功能示例
2018/04/12 Javascript
如何将HTML字符转换为DOM节点并动态添加到文档中详解
2018/08/19 Javascript
Python实现求两个csv文件交集的方法
2017/09/06 Python
使用python绘制3维正态分布图的方法
2018/12/29 Python
Python中如何导入类示例详解
2019/04/17 Python
Python Django框架实现应用添加logging日志操作示例
2019/05/17 Python
学python安装的软件总结
2019/10/12 Python
美国隐形眼镜销售网站:ContactsDirect
2017/10/28 全球购物
女子锻炼服装和瑜伽服装:Splits59
2019/03/04 全球购物
在DELPHI中调用存储过程和使用内嵌SQL哪种方式更好
2016/11/22 面试题
机电一体化大学生求职信
2013/11/08 职场文书
销售部主管岗位职责
2013/12/18 职场文书
探矿工程师自荐信
2014/01/24 职场文书
企业员工培训感言
2014/02/26 职场文书
领导班子四风对照检查材料思想汇报
2014/09/26 职场文书
2014党的群众路线教育实践活动总结报告
2014/10/31 职场文书
坎儿井导游词
2015/02/09 职场文书
2015年行政部工作总结
2015/04/28 职场文书
2015社区个人工作总结范文
2015/05/13 职场文书
2015年初中教师个人工作总结
2015/07/21 职场文书
六年级作文之预言作文
2019/10/25 职场文书
总结Python连接CS2000的详细步骤
2021/06/23 Python