彻底删除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 相关文章推荐
PHP5/ZendEngine2的改进
Oct 09 PHP
Php+SqlServer实现分页显示
Oct 09 PHP
透析PHP的配置文件php.ini
Oct 09 PHP
PHP 中英文混合排版中处理字符串常用的函数
Apr 12 PHP
PHP中的正则表达式函数介绍
Feb 27 PHP
php5.5中类级别的常量使用介绍
Oct 02 PHP
php 中文字符串首字母的获取函数分享
Nov 04 PHP
PHP生成json和xml类型接口数据格式
May 17 PHP
php开发工具有哪五款
Nov 09 PHP
Symfony2开发之控制器用法实例分析
Feb 05 PHP
PHP中set_include_path()函数相关用法分析
Jul 18 PHP
PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例
Jun 12 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 破解防盗链图片函数
2008/12/09 PHP
zend api扩展的php对象的autoload工具
2011/04/18 PHP
PHP获取音频文件的相关信息
2015/06/22 PHP
Yii 访问 Gii(脚手架)时出现 403 错误
2018/06/06 PHP
Knockoutjs的环境搭建教程
2012/11/26 Javascript
JQueryEasyUI datagrid框架的进阶使用
2013/04/08 Javascript
JavaScript中的连字符详解
2013/11/28 Javascript
jQuery与Ajax以及序列化
2016/02/01 Javascript
深入学习AngularJS中数据的双向绑定机制
2016/03/04 Javascript
JS中的数组方法笔记整理
2016/07/26 Javascript
ES5学习教程之Array对象
2017/04/01 Javascript
Vue表单验证插件Vue Validator使用方法详解
2017/04/07 Javascript
AngularJS select设置默认值的实现方法
2017/08/25 Javascript
Angular实现点击按钮控制隐藏和显示功能示例
2017/12/29 Javascript
微信小程序公用参数与公用方法用法示例
2019/01/09 Javascript
详解使用WebPack搭建React开发环境
2019/08/06 Javascript
如何利用nodejs自动定时发送邮件提醒(超实用)
2020/12/01 NodeJs
[03:27]《辉夜杯》线下训练营 导师CU和海涛指点迷津
2015/10/23 DOTA
Python实现的简单文件传输服务器和客户端
2015/04/08 Python
python解析基于xml格式的日志文件
2017/02/25 Python
Django数据库连接丢失问题的解决方法
2018/12/29 Python
python实现windows壁纸定期更换功能
2019/01/21 Python
Python判断对象是否为文件对象(file object)的三种方法示例
2019/04/26 Python
python并发爬虫实用工具tomorrow实用解析
2019/09/25 Python
python使用配置文件过程详解
2019/12/28 Python
python中upper是做什么用的
2020/07/20 Python
奥巴马竞选演讲稿
2014/05/15 职场文书
校园元旦活动总结
2014/07/09 职场文书
助人为乐道德模范事迹材料
2014/08/16 职场文书
五好家庭申报材料
2014/12/20 职场文书
涪陵白鹤梁导游词
2015/02/09 职场文书
社区母亲节活动总结
2015/02/10 职场文书
党支部半年考察意见
2015/06/01 职场文书
七年级写作指导之游记作文
2019/10/07 职场文书
“爱眼护眼,提前预防近视”倡议书3篇
2019/10/30 职场文书
MySQL 使用自定义变量进行查询优化
2021/05/14 MySQL