Thinkphp3.2 无限级分类删除,单个删除,批量删除

1,单个删除

这时控制器的单个删除方法

    public function del(){
      $id=I('id');
      $pri=D('privilege');
      // dump($id);
      // die;
      if($pri->delete($id)){
        $this->success('删除权限成功',U('lst'));
      }else{
        $this->error('删除权限失败',U('lst'));
      }
    }

首先我们想一下,比如a的子类是b,b的子类是c,c的子类是d,那么我们点击一个b的按钮,按道理,cd都要被删除,但是如果只有上面一个函数那么界面里面确实吧,bcd都被删除了,但是数据库里面只有b被删除了,还保留cd,所以这是我们需要另外的方法,_before_delete函数,这个在model层面

public function childid($priid){
        $data = $this->select();
        // dump($data);
        // die;
        return $this->getchildid($data,$priid);
    }

    public function getchildid($data,$parentid){
      static $ret=array();
      foreach($data as $k =>$v){
        if($v['parentid']==$parentid){
          $ret[]=$v['id'];
          $this->getchildid($data,$v['id']);
        }
      }
      return $ret;
    }

    public function _before_delete($options){
        if(is_array($options['where']['id'])){    //if where下面的id是数组的话那么执行的是批量删除,否则是单个删除
              // var_dump($options['where']['id'][1]);
              // die;
            $arr=explode(',', $options['where']['id'][1]);      //把字符串变成数组
          //  var_dump($arr);
          //  die;
            $soncates=array();
            foreach ($arr as $k => $v)
            {
                $soncates2=$this->childid($v);
                // var_dump($soncates2);
                // die;
                $soncates=array_merge($soncates,$soncates2);            //合并数组
            }
            $soncates=array_unique($soncates);        //移除数组中相同的部分
            $childrenids=implode(',', $soncates);
            // var_dump($childrenids);
            // die;
        } else {
            $childrenids = $this->childid($options['where']['id']);
            $childrenids = implode(',',$childrenids);
            // dump($childrenids);
            // die;
        }
        if($childrenids){
            $this->execute("delete from cs_privilege where id in($childrenids)");
        }
    }
childid和getchildid这两个函数是什么意思是呢,childid是获取被删除的id,getchildid是找出这个id下面的子栏目,也是递归寻找

下面来解释一下_before_delete这个函数,虽然我也有点不理解,这个是在删除之前执行的操作

如果你是单个删除的话打印出来$options,是下图这个样子,id下面是单个数据

如果你是批量删除的话打印出来$options,是下图这个样子,id下面是个数组

这样我们就能理解到底是批量删除还是单个删除了,

if else就能看懂了,implode,是拆分数组,explode是合并数组

$this->execute("delete from cs_privilege where id in($childrenids)");这个是sql语句,我也不是很懂,
详情请看http://blog.csdn.net/helin916012530/article/details/39338699
就这样删除也就完成了


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ThinkPHP是一款基于PHP的开源Web应用框架,是一个轻量、高效率的框架,具有模块化、面向对象和MVC设计模式等特点。ThinkPHP 3.2ThinkPHP框架的一个历史版本,它在运行速度、安全性以及开发效率上都有不错的表现。 要下载ThinkPHP 3.2,首先需要打开ThinkPHP的官方网站(www.thinkphp.cn)。在官网主页上,我们可以找到“下载”按钮,点击进入下载页面。 在下载页面上,我们可以找到最新版本的ThinkPHP框架。为了下载ThinkPHP 3.2版本,我们需要向下滚动页面,找到“历史版本下载”或类似的标签,并点击进入历史版本页面。 在历史版本页面上,我们可以看到不同版本的ThinkPHP框架列表。找到并点击“ThinkPHP 3.2”版本,进入该版本的下载页面。 在下载页面上,我们可以选择下载源码或者下载压缩包。如果我们需要自己进行源码修改或者扩展开发,可以选择下载源码。如果我们只是使用框架进行开发而不需要修改源码,可以选择下载压缩包。 选择相应的下载方式后,点击下载按钮即可开始下载。下载完成后,我们可以使用解压软件将压缩包解压缩到我们的项目目录中,然后按照ThinkPHP 3.2的文档进行配置和使用。 总之,要下载ThinkPHP 3.2,我们只需要访问ThinkPHP的官方网站,找到历史版本下载页面,选择相应的下载方式,然后进行下载和安装。通过合理使用ThinkPHP框架,我们可以快速开发出高效、稳定的Web应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值