彻底删除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的论坛(1)
Oct 09 PHP
php的正则处理函数总结分析
Jun 20 PHP
php+mysql事务rollback&commit示例
Feb 08 PHP
php将数据库导出成excel的方法
May 07 PHP
PHP 获取MySQL数据库里所有表的实现代码
Jul 13 PHP
CI框架自动加载session出现报错的解决办法
Jun 17 PHP
Thinkphp3.2.3整合phpqrcode生成带logo的二维码
Jul 21 PHP
PHP实现电商订单自动确认收货redis队列
May 17 PHP
Thinkphp 框架扩展之数据库驱动常用方法小结
Apr 23 PHP
PHP数组与字符串互相转换实例
May 05 PHP
Thinkphp5框架异常处理操作实例分析
Jun 03 PHP
PHPStorm2020.1永久激活及下载更新至2020(推荐)
Sep 25 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中执行系统外部命令
2006/10/09 PHP
php网页后退不再出现过期
2007/03/08 PHP
php异常处理技术,顶级异常处理器
2012/06/13 PHP
深入理解require与require_once与include以及include_once的区别
2013/06/05 PHP
PHP中使用Session配合Javascript实现文件上传进度条功能
2014/10/15 PHP
php使用cookie实现记住登录状态
2015/04/27 PHP
JavaScript 开发规范要求(图文并茂)
2010/06/11 Javascript
jQuery代码优化 选择符篇
2011/11/01 Javascript
jQuery搜索同辈元素方法
2015/02/10 Javascript
JS控制网页动态生成任意行列数表格的方法
2015/03/09 Javascript
JavaScript中的cacheStorage使用详解
2015/07/29 Javascript
JS实现的仿东京商城菜单、仿Win右键菜单及仿淘宝TAB特效合集
2015/09/28 Javascript
理解javascript定时器中的setTimeout与setInterval
2016/02/23 Javascript
JS获取checkbox的个数简单实例
2016/08/19 Javascript
Bootstrap轮播插件使用代码
2016/10/11 Javascript
vue-cli 组件的导入与使用教程详解
2018/04/11 Javascript
微信小程序动态生成二维码的实现代码
2018/07/25 Javascript
Vue Promise的axios请求封装详解
2018/08/13 Javascript
element-ui循环显示radio控件信息的方法
2018/08/24 Javascript
Vue创建头部组件示例代码详解
2018/10/23 Javascript
详解实现一个通用的“划词高亮”在线笔记功能
2019/04/23 Javascript
vue prop属性传值与传引用示例
2019/11/13 Javascript
Vue移动端用淘宝弹性布局lib-flexible插件做适配的方法
2020/05/26 Javascript
Python数据库的连接实现方法与注意事项
2016/02/27 Python
详解python3中socket套接字的编码问题解决
2017/07/01 Python
浅析python打包工具distutils、setuptools
2018/04/20 Python
python 等差数列末项计算方式
2020/05/03 Python
巴西24小时在线药房:Droga Raia
2020/05/12 全球购物
高考寄语大全
2014/04/08 职场文书
网站创业计划书
2014/04/30 职场文书
招股说明书范本
2014/05/06 职场文书
银行给客户的感谢信
2015/01/23 职场文书
党员转正介绍人意见
2015/06/03 职场文书
丧事酒宴答谢词
2015/09/30 职场文书
2016年社区国庆节活动总结
2016/04/01 职场文书
HTML+CSS实现导航条下拉菜单的示例代码
2021/08/02 HTML / CSS