后台管理员操作详情CURD记录

之前在网上看到的一个管理员操作详情的设计,也想在自己的博客中加上一个,就参考着加上了,效果如下:
效果
效果

实现起来,需要加上几张表,作为数据的存储
表设计

这样表的设计就完成了,但是所有的工作才只能算是完成了一半,表的作用是信息的存储,需要php的逻辑进行向表中添加数据的操作:

/**
     * 记录新增的字段的值
     */
    protected function _adding($table_name,$pk){
        //将取得的信息插入到对应的表中
        $m_tables = \M('Tables');
        //取得表的id
        $table_id = $m_tables->where(array('tab_name'=>array('eq',\C('DB_PREFIX').ucfirst($table_name))))->getfield('tab_id') + 0;
        if(! $table_id){
            die("传递的表名有错误!");
        }
        $m_admin_log = \M('AdminLog');
        $source['admin_id'] = \session('user.admin_id') + 0;
        $source['tab_id'] = $table_id;
        $source['type'] = 1;
        $source['dt'] = time();
        //将记录信息插入到记录主表中
        $log_id = $m_admin_log->add($source);
        //将得到的主键的id放入到附表中,只存一个ac_key即可
        $m_admin_action = \M('AdminAction');
        $m_admin_action->add(array('log_id'=>$log_id,'pk_id'=>$pk));
    }
    /**
     * 记录更新时的记录方法
     */
    protected function _updateStart($table_name,$pk){
        //将取得的信息插入到对应的表中
        $m_tables = \M('Tables');
        //取得表的id
        $table_id = $m_tables->where(array('tab_name'=>array('eq',\C('DB_PREFIX').ucfirst($table_name))))->getfield('tab_id') + 0;
        $pk_name = $m_tables->where(array('tab_name'=>array('eq',\C('DB_PREFIX').ucfirst($table_name))))->getfield('pk_name');
        if(! $table_id){
            die("传递的表名有错误!");
        }
        //需要记录表中的所有的数据信息,在插入之后使用循环每个字段进行对比,找出不同的值,使用数组记录
        $this->_pk = $pk;
        $this->_content = \M($table_name)->where(array($pk_name=>array('eq',$pk)))->find();
        $m_admin_log = \M('AdminLog');
        $source['admin_id'] = \session('user.admin_id') + 0;
        $source['tab_id'] = $table_id;
        $source['type'] = 2;
        $source['dt'] = time();
        //将记录信息插入到记录主表中
        $this->log_id = $m_admin_log->add($source);
    }
    /**
     * 记录更新完成后,修改的字段及修改的值
     */
    public function _updateStop($table_name){
        //将取得的信息插入到对应的表中
        $m_tables = \M('Tables');
        //取得对应的字段
        $pk_name = $m_tables->where(array('tab_name'=>array('eq',\C('DB_PREFIX').ucfirst($table_name))))->getfield('pk_name');
        //需要记录表中的所有的数据信息,在插入之后使用循环每个字段进行对比,找出不同的值,使用数组记录
        $new_content = \M($table_name)->where(array($pk_name=>array('eq',$this->_pk)))->find();
        //空数组,装纳修改了的字段及值
        $temp_arr = array_diff_assoc($new_content,$this->_content);
        //将取得的信息插入到记录信息表
        $m_admin_action = \M('AdminAction');
        foreach($temp_arr as $k=>$v){
            $data['pk_id'] = $this->_pk;
            if($k == 'update_at'){
                continue;
            }else{
                $data['ac_key'] = $k;
            }

            $data['new_value'] = $v;
            $data['old_value'] = $this->_content[$k];
            $data['log_id'] = $this->log_id;
            $m_admin_action->add($data);
        }
    }

    /**
     * 记录删除的字段
     */
    protected function _deleting($table_name,$pk){
        //将取得的信息插入到对应的表中
        $m_tables = \M('Tables');
        //取得表的id
        $table_id = $m_tables->where(array('tab_name'=>array('eq',\C('DB_PREFIX').ucfirst($table_name))))->getfield('tab_id') + 0;
        if(! $table_id){
            die("传递的表名有错误!");
        }
        $m_admin_log = \M('AdminLog');
        $source['admin_id'] = \session('user.admin_id') + 0;
        $source['tab_id'] = $table_id;
        $source['type'] = 3;
        $source['dt'] = time();
        //将记录信息插入到记录主表中
        $log_id = $m_admin_log->add($source);
        //将得到的主键的id放入到附表中,只存一个ac_key即可
        $m_admin_action = \M('AdminAction');
        $m_admin_action->add(array('log_id'=>$log_id,'pk_id'=>$pk));
    }
这是在 后台的CommonController中 我添加的方法,用来完成记录信息:
这样在使用的时候,只需要传递表名称以及受影响的数据的主键id就可以完成了:
数据的添加:     $this->_adding('Blog',$blog_id);

数据的更新:    $this->_updateStart('Blog',$blog_id);        $this->_updateStop('Blog');

数据的删除:      $this->_deleting('Blog',$blog_id);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值