彻底删除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环境配置 php5 MySQL5 apache2 phpmyadmin安装与配置图文教程
Mar 16 PHP
php下批量挂马和批量清马代码
Feb 27 PHP
PHP中调用ASP.NET的WebService的代码
Apr 22 PHP
VIM中设置php自动缩进为4个空格的方法详解
Jun 14 PHP
php像数组一样存取和修改字符串字符
Mar 21 PHP
php实现可用于mysql,mssql,pg数据库操作类
Dec 13 PHP
搭建Vim为自定义的PHP开发工具的一些技巧
Dec 11 PHP
值得分享的php+ajax实时聊天室
Jul 20 PHP
PHP+mysql实现从数据库获取下拉树功能示例
Jan 06 PHP
php实现基于pdo的事务处理方法示例
Jul 21 PHP
PHP命名空间与自动加载机制的基础介绍
Aug 25 PHP
PHP扩展安装方法步骤解析
Nov 24 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 文件上传进度条的两种实现方法的代码
2007/11/25 PHP
PHP中iconv函数知识汇总
2015/07/02 PHP
Windows2003下php5.4安装配置教程(IIS)
2016/06/30 PHP
用js实现下载远程文件并保存在本地的脚本
2008/05/06 Javascript
JavaScript prototype对象的属性说明
2010/03/13 Javascript
json数据的列循环示例
2013/09/06 Javascript
在JS中解析HTML字符串示例代码
2014/04/16 Javascript
JS实现点击颜色块切换指定区域背景颜色的方法
2015/02/25 Javascript
js实现鼠标触发图片抖动效果的方法
2015/02/27 Javascript
jQuery实现淡入淡出二级下拉导航菜单的方法
2015/08/28 Javascript
通过js获取上传的图片信息(临时保存路径,名称,大小)然后通过ajax传递给后端的方法
2015/10/01 Javascript
jQuery实现内容定时切换效果完整实例
2016/04/06 Javascript
js精准的倒计时函数分享
2016/06/29 Javascript
ES6中箭头函数的定义与调用方式详解
2017/06/02 Javascript
JS中的多态实例详解
2017/10/15 Javascript
Vue+Flask实现简单的登录验证跳转的示例代码
2018/01/13 Javascript
Vue 路由 过渡动效 数据获取方法
2018/07/31 Javascript
js实现简单掷骰子小游戏
2019/10/24 Javascript
Webpack3+React16代码分割的实现
2021/03/03 Javascript
[50:01]Ti4 冒泡赛第二天 NEWBEE vs Titan
2014/07/15 DOTA
Python GAE、Django导出Excel的方法
2008/11/24 Python
python实现支持目录FTP上传下载文件的方法
2015/06/03 Python
在Python的Django框架中调用方法和处理无效变量
2015/07/15 Python
利用python实现简单的循环购物车功能示例代码
2017/07/05 Python
python如何实现int函数的方法示例
2018/02/19 Python
用Python实现二叉树、二叉树非递归遍历及绘制的例子
2019/08/09 Python
python实现在线翻译
2020/06/18 Python
巧用CSS3 border实现图片遮罩效果代码
2012/04/09 HTML / CSS
Html5 new XMLHttpRequest()监听附件上传进度
2021/01/14 HTML / CSS
澳大利亚排名第一的在线酒类商店:MyBottleShop
2018/04/26 全球购物
KTV门卫岗位职责
2014/10/09 职场文书
2014年置业顾问工作总结
2014/11/17 职场文书
推广普通话主题班会
2015/08/17 职场文书
2016优秀班主任个人先进事迹材料
2016/02/26 职场文书
mybatis3中@SelectProvider传递参数方式
2021/08/04 Java/Android
win11高清晰音频管理器在哪里?win11找不到高清晰音频管理器解决办法
2022/04/08 数码科技