ci框架数据库操作封装类

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

/**
 *  通用于各数据表的增删改查操作   
*/

class Commen_model{
    protected $CI; //框架原始函数引用
    protected $data;
     /**
     * 解析函数
     *
     * @access public
     * @return void
     */

    publicfunction __construct()
    {
        $this->CI =& get_instance(); //框架原始函数引用
        $this->CI->load->database();
    }
    /**
     * 根据提交submit的值执行各种操作 并 根据条件调出最新结果
     *
     * @access public
     * @param  data
     * @return null
     */

    publicfunction run($data)
    {
        $this->data = $data;
        $query = $_REQUEST;
        //获取字段元数据
        $this->data['title_re'] = $this->get_field();
        $this->data['item_title_n'] = count($this->data['title_re']);
        /*新建数据行*/
        if(isset($query['insert'])&&is_numeric($query['insert'])){
            $this->data['insert_n'] = $query['insert'];
            $view_crud_do = TRUE;
            //查找关联项
            if(isset($data['config']['field_tool'])){
                foreach($data['config']['field_tool'] as $key=>$val){
                    if($val=='select'&&isset($data['config']['field_tool'][$key.'_config'])){
                        $select_config = $data['config']['field_tool'][$key.'_config'];
                        $select_config[3] =isset($select_config[3])?$select_config[3]:'';
                        $this->data['select_re'][$key] =  $this->get_select($select_config[0],$select_config[1].','.$select_config[2],$select_config[3]);
                    }
                    if($val=='arr_select'&&isset($data['config']['field_tool'][$key.'_config'])){
                        $select_config = $data['config']['field_tool'][$key.'_config'];
                        $this->CI->config->load($select_config[0]);
                        $this->data['select_re'][$key] =  $this->CI->config->item($select_config[1]);
                    }
                }
            }       
        }
        /*复制数据行*/
        if(isset($query['copy'])&&(is_numeric($query['copy'])||isset($query['check_id']))){
            $ids = is_numeric($query['copy'])?$query['copy']:$query['check_id'];
            $this->data['copy_re'] = $this->get_by_ids($ids);
            if(!isset($this->data['copy_re'])){
                $this->data['insert_n'] =1;
            }
            $view_crud_do = TRUE;
        }
        /*编辑数据行*/
        if(isset($query['edit'])&&(is_numeric($query['edit'])||isset($query['check_id']))){
            $ids = is_numeric($query['edit'])?$query['edit']:$query['check_id'];
            $this->data['edit_re'] = $this->get_by_ids($ids);
            $view_crud_do = TRUE;
        }
        /*删除数据行*/
        if(isset($query['remove'])&&(is_numeric($query['remove'])||isset($query['check_id']))){
            $ids = is_numeric($query['remove'])?$query['remove']:$query['check_id'];
            $this->data['remove_re'] = $this->get_by_ids($ids);
            $view_crud_do = TRUE;
        }
        if(isset($view_crud_do)){
            $this->CI->load->view('header', $this->data);
            $this->CI->load->view('commen/crud_do');
            $this->CI->load->view('footer');
            return;
        }
        /*提交后-添加新建数据行*/
        if(isset($query['submit_insert'])){
            unset($query['submit_insert']);
            $insert_n = $query['arr_length'];
            unset($query['arr_length']);
            for($i=0;$i<$insert_n;$i++){
                foreach($query as $key=>$val){
                    $insert_data[$i][$key] = $val[$i];
                }       
            }          
            $this->data['run_re'] = $this->insert($insert_data);
        }
        /*提交后-更新编辑数据行*/
        if(isset($query['submit_update'])){
            unset($query['submit_update']);
            $insert_n = $query['arr_length'];
            unset($query['arr_length']);
            for($i=0;$i<$insert_n;$i++){
                foreach($query as $key=>$val){
                    $insert_data[$i][$key] = $val[$i];
                }       
            }          
            $this->data['run_re'] = $this->update($insert_data);
        }
        /*提交后-删除数据行*/
        if(isset($query['submit_remove'])){
            unset($query['submit_remove']);
            $insert_n = $query['arr_length'];
            unset($query['arr_length']);
            for($i=0;$i<$insert_n;$i++){
                $ids[$i]=$query['id'][$i];       
            }
            $this->data['run_re'] = $this->delete($ids);
        }
        /*查找表中数据*/
        //页数
        $this->data['page'] =isset($query['page'])?$query['page']:1;   
        //每页显示个数
        if(isset($query['per_page_n'])) $_SESSION['per_page_n'] = $query['per_page_n'];//session临时保存每页项数   
        $this->data['per_page_n'] =isset($_SESSION['per_page_n'])?$_SESSION['per_page_n']:15;
        //构造过滤参数
        if(isset($query['filter_query_clear'])||(isset($query['filter_content'])&&$query['filter_content']=='')){
            unset($_SESSION[$data['model_name'].'_filter_query']);
            unset($_SESSION[$data['model_name'].'_filter_content']);
        }
        if(isset($query['filter_content'])&&$query['filter_content']!=''){
            $query_filter_query ="";
            foreach ($this->data['title_re'] as $key => $value){
                $query_filter_query .= $data['model_name'].".".$value->name." LIKE '%".$query['filter_content']."%' OR ";
            }           
            $_SESSION[$data['model_name'].'_filter_query']  =  $query_filter_query.$data['model_name'].'.id = 0';
            $_SESSION[$data['model_name'].'_filter_content']  =  $query['filter_content'];
        }
        if(isset($query['filter_a'])){
            $query_filter_query = $query_filter_content ="";
            unset($query['filter_a']);
            foreach ($query as $key => $value){
                $query_filter_query .= $data['model_name'].".".$key." = ".$value." AND ";
                $query_filter_content .= $data['model_name'].".".$key." = ".$value;
            }          
            $_SESSION[$data['model_name'].'_filter_query']  =  $query_filter_query.$data['model_name'].'.id != 0';
            $_SESSION[$data['model_name'].'_filter_content']  =  $query_filter_content;
        }
        $this->data['filter_query'] =isset($_SESSION[$data['model_name'].'_filter_query'])?$_SESSION[$data['model_name'].'_filter_query']:$data['model_name'].'.id != 0';
        //构造排序参数
        if(isset($query['order_clear'])) unset($_SESSION[$data['model_name'].'_order']);
        if(isset($query['order'])){           
            $_SESSION[$data['model_name'].'_order']  =  $data['model_name'].".".$query['order'];
        }
        $this->data['filter_order'] =isset($_SESSION[$data['model_name'].'_order'])?$_SESSION[$data['model_name'].'_order']:$data['model_name'].'.id DESC';
        /*导出excel数据*/
        if(isset($query['excel_out'])){
            if(!isset($query['check_field'])){ echo"未选导出字段!"; return;}
            if($query['out_end']-$query['out_start']<0){ echo"导出范围有误!"; return;}
            $is_out =array('out_start'=>$query['out_start']-1,'out_number'=>$query['out_end']-$query['out_start']+1);
            $is_out['out_fields'] = $this->data['model_name'].'.'.implode(','.$this->data['model_name'].'.', $query['check_field']);
            $data_out =  $this->find_all($is_out);
 
            $out_time = date("Y-m-d H:i:s");
            $out_title =isset($data['config']['chinese']['ha_model_name'])?$data['config']['chinese']['ha_model_name']:$data['model_name'];
            $data_range = $query['out_start'].'-'.$query['out_end'];
            header("Content-type:application/vnd.ms-excel");
            header("Content-Disposition:attachment;filename=".$out_title."_".date("Y-m-d")."_".$data_range.".xls");
            echo $out_title;
            echo"nn";
            echo"数据范围:"."t".$query['out_start'].'-'.$query['out_end']."t";
            echo"导出日期:"."t".$out_time;
            echo"nn";
            foreach($query['check_field'] as $key=>$val){
                if(isset($data['config']['chinese'][$val])) echo $data['config']['chinese'][$val]; elseecho $val;
                echo"t";
            }
            echo   "n";
            foreach($data_out as $key=>$val){
                foreach($val as $item){
                    echo $item."t";
                }
                echo"n";
            }
            return;
        }       
        //进行查找
        $this->data['find_re'] =  $this->find_all();
        //var_dump($this->data['find_re']);
        $this->data['count_all'] =  $this->get_count();
 
        $this->CI->load->view('header', $this->data);
        $this->CI->load->view('commen/crud');
        $this->CI->load->view('footer');
        return;   
    }
    /**
     * 获取字段元数据
     *
     * @access public
     * @param  model_name
     * @return array
     */

    publicfunction get_field()
    {
        return $this->CI->db->field_data($this->data['model_name']);
    }
    /**
     * 获取总行数
     *
     * @access public
     * @param  model_name
     * @return int
     */

    publicfunction get_count()
    {
        $this->CI->db->where($this->data['filter_query']);
        return $this->CI->db->count_all_results($this->data['model_name']);
    }
    /**
     * 添加一到多行数据
     *
     * @access public
     * @param  insert_data model_name
     * @return insert_id or false
     */

    publicfunction insert($insert_data)
    {
        if (is_array($insert_data[0]))
        {
            if($this->CI->db->insert_batch($this->data['model_name'], $insert_data))
            {
                return  $this->CI->db->insert_id();
            }    
        }else{
            if($this->CI->db->insert($this->data['model_name'], $insert_data))
            {
                return  $this->CI->db->insert_id();
            }        
        }
        return false;
    }
    /**
     * 更新一到多行数据
     *
     * @access public
     * @param  insert_data model_name
     * @return insert_id or false
     */

    publicfunction update($update_data)
    {
        if (is_array($update_data[0]))
        {
            $this->CI->db->update_batch($this->data['model_name'], $update_data,'id');
            if($this->CI->db->affected_rows())
            {
                return  $update_data[0]['id'];
            }    
        }else{
            $this->CI->db->update($this->data['model_name'], $update_data,'id');
            if($this->CI->db->affected_rows())
            {
                return  $update_data['id'];
            }        
        }
        return false;
    }
    /**
     * 删除一到多行数据
     *
     * @access public
     * @param  id or ids
     * @return true or false
     */

    publicfunction delete($ids){
        if(is_array($ids)){
            $arr_with_ids = $ids;
        }elseif(is_numeric($ids)){
            $arr_with_ids[0] = $ids;
        }else{
            return false;
        }
        //删除数据
        if ($arr_with_ids){
            $this->CI->db->where_in('id',$arr_with_ids);
            $this->CI->db->delete($this->data['model_name']);
        }
        if($this->CI->db->affected_rows()) return true;
        return false;   
    }
    /**
     * 获取数据行
     *
     * @access public
     * @param  filter_order filter_query page per_page_n model_name
     * @return result_array or false
     */

    publicfunction find_all($is_out=null)
    {
        //根据配置构建与其他表的关联
        $select_str ="";
        if(isset($this->data['config']['field_add'])){
            foreach($this->data['config']['field_add'] as $key=>$val){
                if(is_array($val['name'])){
                    $this->CI->db->join($val['name'][1],$this->data['model_name'].".".$val['name'][0]." = ".$val['name'][1].".".$val['name'][2]);
                    $select_str .=",".$val['name'][1].".".$val['name'][3]." AS ".$val['name'][1]."_".$val['name'][3];
                }
            }
        }
        $this->CI->db->order_by($this->data['filter_order']);
        if(!empty($is_out)){
            $this->CI->db->limit($is_out['out_number'],$is_out['out_start']);
            $this->CI->db->select($is_out['out_fields']);
        }else{
            $this->CI->db->limit($this->data['per_page_n'],($this->data['page']-1)*$this->data['per_page_n']);
            $this->CI->db->select($this->data['model_name'].'.*'.$select_str);           
        }
 
 
        if($query = $this->CI->db->get_where($this->data['model_name'], $this->data['filter_query']))
        {
            return $query->result_array();
        }
        return false;
    }
    /**
     * 通过id获取一到多行数据
     *
     * @access public
     * @param  id
     * @return result_array or false
     */

    publicfunction get_by_ids($ids)
    {
      if(is_array($ids)){
              $this->CI->db->where_in('id',$ids);
              $query = $this->CI->db->get($this->data['model_name']);
              return $query->result_array();
      }elseif(is_numeric($ids)){
              $query = $this->CI->db->get_where($this->data['model_name'], array('id'=> $ids));
              return $query->result_array();
      }
      return false;             
    }
    /**
     * 新建数据行时获取关联的数据
     *
     * @access public
     * @param 
     * @return result_array or false
     */

    publicfunction get_select($table,$fields,$where)
    {
      if(isset($table)&&isset($fields)){
            $this->CI->db->select($fields);
            if(!empty($where))  $this->CI->db->where($where);
            $query = $this->CI->db->get($table);
            return $query->result_array();
      }
      return false;        
    }
}