彻底删除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获取mysql版本的几种方法小结
Mar 25 PHP
drupal 代码实现URL重写
May 04 PHP
修改php.ini以达到屏蔽错误信息并记录日志
Jun 16 PHP
PHP命令行脚本接收传入参数的三种方式
Aug 20 PHP
symfony表单与页面实现技巧
Jan 26 PHP
PHP获取文件夹内文件数的方法
Mar 12 PHP
typecho插件编写教程(六):调用接口
May 28 PHP
谈谈 PHP7新增功能
Dec 16 PHP
基于命令行执行带参数的php脚本并取得参数的方法
Jan 25 PHP
Yii 2.0如何使用页面缓存方法示例
May 23 PHP
详解PHP中的外观模式facade pattern
Feb 05 PHP
使用laravel指定日志文件记录任意日志
Oct 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
IP138 IP地址查询小偷实现代码
2010/02/15 PHP
thinkphp实现面包屑导航(当前位置)例子分享
2014/05/10 PHP
微信公众平台天气预报功能开发
2014/07/06 PHP
php分页函数完整实例代码
2014/09/22 PHP
php自定义加密与解密程序实例
2014/12/31 PHP
php简单实现多字节字符串翻转的方法
2015/03/31 PHP
使用xampp搭建运行php虚拟主机的详细步骤
2015/10/21 PHP
php5.x禁用eval的操作方法
2018/10/19 PHP
支持ie与FireFox的剪切板操作代码
2009/09/28 Javascript
javaScript 利用闭包模拟对象的私有属性
2011/12/29 Javascript
使用AngularJS处理单选框和复选框的简单方法
2015/06/19 Javascript
JavaScript求一个数组中重复出现次数最多的元素及其下标位置示例
2018/07/23 Javascript
webpack4 处理SCSS的方法示例
2018/09/03 Javascript
解决vue点击控制单个样式的问题
2018/09/05 Javascript
微信小程序image图片加载完成监听
2019/08/31 Javascript
[02:06]DOTA2肉山黑名单魔法终结者 敌法师中文配音鉴赏
2013/06/17 DOTA
Python赋值语句后逗号的作用分析
2015/06/08 Python
python实现简单ftp客户端的方法
2015/06/28 Python
详解Python多线程Selenium跨浏览器测试
2017/04/01 Python
使用Python操作FTP实现上传和下载的方法
2019/04/01 Python
Python对象转换为json的方法步骤
2019/04/25 Python
python中的global关键字的使用方法
2019/08/20 Python
在django项目中导出数据到excel文件并实现下载的功能
2020/03/13 Python
Python二元算术运算常用方法解析
2020/09/15 Python
Python模拟登录和登录跳转的参考示例
2020/10/30 Python
纯CSS绘制漂亮的圆形图案效果
2014/05/07 HTML / CSS
浅析HTML5中header标签的用法
2016/06/24 HTML / CSS
澳大利亚工具仓库:Tools Warehouse
2018/10/15 全球购物
大学生文员专业个人求职信范文
2014/01/05 职场文书
信息管理与信息系统专业求职信
2014/06/21 职场文书
美术第二课堂活动总结
2014/07/08 职场文书
中队活动总结
2014/08/27 职场文书
迁户口计划生育证明
2014/10/19 职场文书
Oracle以逗号分隔的字符串拆分为多行数据实例详解
2021/07/16 Oracle
Java字符串逆序方法详情
2022/03/21 Java/Android
vue配置型表格基于el-table拓展之table-plus组件
2022/04/12 Vue.js