彻底删除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 加密/解密函数 dencrypt(动态密文,带压缩功能,支持中文)
Jan 30 PHP
PHP网站安装程序制作的原理、步骤、注意事项和示例代码
Aug 01 PHP
PHP5.4中json_encode中文转码的变化小结
Jan 30 PHP
php生成扇形比例图实例
Nov 06 PHP
Linux下PHP加速器APC的安装与配置笔记
Oct 24 PHP
yii的CURD操作实例详解
Dec 04 PHP
PHP实现的简单分页类及用法示例
May 06 PHP
PHP实现的曲线统计图表示例
Nov 10 PHP
PHP接口继承及接口多继承原理与实现方法详解
Oct 18 PHP
PHP iconv()函数字符编码转换的问题讲解
Mar 22 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
Apr 09 PHP
laravel 时间格式转时间戳的例子
Oct 11 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 随机数的产生、页面跳转、件读写、文件重命名、switch语句
2009/08/07 PHP
PHP管理内存函数 memory_get_usage()使用介绍
2012/09/23 PHP
PHP+jquery+ajax实现即时聊天功能实例
2014/12/23 PHP
php查询操作实现投票功能
2016/05/09 PHP
jquery 上下滚动广告
2009/06/17 Javascript
在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
2011/06/02 Javascript
基于jQuery实现下拉框
2014/11/24 Javascript
jquery实现鼠标滑过小图时显示大图的方法
2015/01/14 Javascript
js实现仿京东2级菜单效果(带延时功能)
2015/08/27 Javascript
javascript html5摇一摇功能的实现
2016/04/19 Javascript
用JavaScript动态建立或增加CSS样式表的实现方法
2016/05/20 Javascript
js中获取时间new Date()的全面介绍
2016/06/20 Javascript
jQuery插件echarts实现的单折线图效果示例【附demo源码下载】
2017/03/04 Javascript
在vue中实现点击选择框阻止弹出层消失的方法
2018/09/15 Javascript
vue实现移动端悬浮窗效果
2018/12/01 Javascript
VSCode使用之Vue工程配置eslint
2019/04/30 Javascript
layui表单提交到后台自动封装到实体类的方法
2019/09/12 Javascript
vue自定义switch开关组件,实现样式可自行更改
2019/11/01 Javascript
jquery实现点击左右按钮切换图片
2021/01/27 jQuery
[02:56]DOTA2上海特锦赛小组赛解说FreeAgain采访花絮
2016/02/27 DOTA
[47:26]完美世界DOTA2联赛 LBZS vs Forest 第二场 11.07
2020/11/09 DOTA
Python 错误和异常小结
2013/10/09 Python
Django获取该数据的上一条和下一条方法
2019/08/12 Python
python实现简单文件读写函数
2021/02/25 Python
pyx文件 生成pyd 文件用于 cython调用的实现
2021/03/04 Python
俄罗斯隐形眼镜和眼镜在线商店:Cronos
2020/06/02 全球购物
关于Java finally的面试题
2016/04/27 面试题
煤矿开采专业求职信
2014/07/08 职场文书
金融管理专业求职信
2014/07/10 职场文书
班子成员四风问题自我剖析材料
2014/09/29 职场文书
遗失证明范文
2015/06/19 职场文书
家属联谊会致辞
2015/07/31 职场文书
关于践行三严三实的心得体会
2016/01/05 职场文书
《游戏公平》教学反思
2016/02/20 职场文书
2016先进工作者事迹材料
2016/02/25 职场文书
jquery插件实现搜索历史
2021/04/24 jQuery