彻底删除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 22 PHP
php下intval()和(int)转换使用与区别
Jul 18 PHP
第三章 php操作符与控制结构代码
Dec 30 PHP
解析thinkphp中的导入文件标签
Jun 20 PHP
ThinkPHP使用心得分享-分页类Page的用法
May 15 PHP
实例简介PHP的一些高级面向对象编程的特性
Nov 27 PHP
thinkphp3.x中cookie方法的用法分析
May 19 PHP
golang与PHP输出excel示例
Jul 22 PHP
Zend Framework分发器用法示例
Dec 11 PHP
php实现基于PDO的预处理示例
Mar 28 PHP
php处理静态页面:页面设置缓存时间实例
Jun 22 PHP
laravel框架关于搜索功能的实现
Mar 15 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与XML联手进行网站编程代码实例
2008/07/10 PHP
PHP生成指定随机字符串的简单实现方法
2015/04/01 PHP
Discuz!X中SESSION机制实例详解
2015/09/23 PHP
PHP实现可精确验证身份证号码的工具类示例
2018/05/31 PHP
JavaScript 编程引入命名空间的方法与代码
2007/08/13 Javascript
JavaScript通过正则表达式实现表单验证电话号码
2014/03/07 Javascript
nodejs 提示‘xxx’ 不是内部或外部命令解决方法
2014/11/20 NodeJs
微信企业号开发之微信考勤Cookies的使用
2015/09/11 Javascript
NodeJS远程代码执行
2016/08/28 NodeJs
JSON 必知必会 观后记
2016/10/27 Javascript
Vue.js学习教程之列表渲染详解
2017/05/17 Javascript
gulp教程_从入门到项目中快速上手使用方法
2017/09/14 Javascript
利用nginx + node在阿里云部署https的步骤详解
2017/12/19 Javascript
微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb
2018/07/04 Javascript
JS实现贪吃蛇游戏
2019/11/15 Javascript
Python反射的用法实例分析
2018/02/11 Python
pandas分别写入excel的不同sheet方法
2018/12/11 Python
解决pycharm上的jupyter notebook端口被占用问题
2019/12/17 Python
keras实现多GPU或指定GPU的使用介绍
2020/06/17 Python
Python调用OpenCV实现图像平滑代码实例
2020/06/19 Python
Python数据分析库pandas高级接口dt的使用详解
2020/12/11 Python
HTML5 语音搜索只需一句代码
2013/01/03 HTML / CSS
HTML5 placeholder(空白提示)属性介绍
2013/08/07 HTML / CSS
Melissa鞋马来西亚官方网站:MDreams马来西亚
2018/04/05 全球购物
GafasWorld西班牙:购买太阳镜、眼镜和隐形眼镜
2019/09/08 全球购物
加工操作管理制度
2014/01/19 职场文书
工厂会计员职责
2014/02/06 职场文书
高中打架检讨书
2014/02/13 职场文书
《找不到快乐的波斯猫》教学反思
2014/02/24 职场文书
旅游节目策划方案
2014/05/26 职场文书
学生偷窃检讨书
2014/09/25 职场文书
小学生安全教育广播稿
2014/10/20 职场文书
安全教育日主题班会
2015/08/13 职场文书
小学英语教师2015年度个人工作总结
2015/10/14 职场文书
大学学生会竞选稿
2015/11/19 职场文书
给原生html中添加水印遮罩层的实现示例
2021/04/02 Javascript