zoukankan      html  css  js  c++  java
  • ci公共模型类

    我们都知道,操作数据库的方法都写在模型中。但是一般情况下,一张表往往至少对应4个操作,也就是所谓crud。那么如果20张表,所对应的模型方法,就达到了80个,重复的操作显然这已经是一个体力活儿。

    那么就对单表操作时,我们进行一下简单的封装。如下是ci框架的示例:

    <?php
    /**
     * Created by PhpStorm.
     * User: kangjianrong
     * Date: 16-8-26
     * Time: 上午10:29
     */
    
    class My_model extends CI_Model {
        //数据库
        public $errors = array();
        const dataBase = 'qndnew';
        
        public function __construct()
        {
            // Call the CI_Model constructor
            parent::__construct();
        }
        /**
         * 查询分页数据(使用于简单的单表操作)
         * @param string $model 模型          例如:User_model
         * @param string $table 表名
         * @param string $select_fields 要显示字段
         * @param array  $param 查询条件:
         *     compare(比较):
         *         array($key => $val) $key为要操作的字段,$val为要操作的值
         *         array('name !=' => $name, 'id <' => $id, 'date >' => $date);
         *     like(模糊查询)
         *         array('title' => $match, 'page1' => $match, 'page2' => $match)
         *     customStr(自定义字符串):
         *         "name='Joe' AND status='boss' OR status='active'"
         *     in:
         *         array('userName' => array('Frank', 'Todd', 'James'))
         * @param string $page  当前页数(查询全部数据时,设置为空)
         * @param string $limit 查询条数(查询全部数据时,设置为空)
         * @param array $order  排序条件:   
         *     array($key => $val)
         *     $key为排序依据的字段,
         *     $val为排序的方式【asc (升序,默认)或 desc(降序), 或 random(随机)】   
         * @$isReturnCount  boole       是否返回总条数                          
         * @return array|boolean
         * 
         */
        public function pageData($model, $table, $param = array(),$select_fields = '', $page = '1', $limit = '15', $order = array(),$isReturnCount = true){
            if(empty($model) || empty($table)){
                return false;
            }
            $this -> load -> model($model);
            
            $table = $this->db->dbprefix.$table;
            //处理查询字段
            if(!empty($select_fields)){
                $this->db->select($select_fields)->from($table);
            }elseif(isset($this -> $model -> selectFields)){
                $this->db->select($this -> $model -> selectFields)->from($table);
            }else{
                $this->db->select('*')->from($table);
            }
            //处理查询条件
            if (is_array($param) && count($param) > 0){
                $this -> parseParam($param);
            } 
            //统计总数
            if($isReturnCount){
                $rs['count']    = $this->db->count_all_results('',false);//不重置查询构造器
                array_push($this -> errors,$this->db->last_query());
            }
            //分页数据处理
            if(isset($page) && isset($param['limit'])){
                //分页边界值 设置
                $offset = $param['page'] <= 1 ? 0 : ($param['page']-1) * $param['limit'];
                $this->db->limit($param['limit'], $offset);
            }
        
            //排序规则的组合
            if (!empty($order) && is_array($order))
            {
                foreach ($order as $key => $val)
                {
                    $this->db->order_by($key, $val);
                }
            }else{ 
                //默认按照此表的主键倒序
                $primary = $this->getPrimary();
                if(!empty($primary))
                {
                    $this->db->order_by($primary, 'DESC');
                }
            }
            $query = $this->db->get();  
            array_push($this -> errors,$this->db->last_query());
            $rs['list'] = $query->result_array();
            return $rs;
            
        }
        /**
         * 解析参数
         */
        private function parseParam($param){
            if(isset($param['compare'])){
                foreach ($param['compare'] as $key => $val){
                    if (!empty($val)) $this->db->where($key, $val);
                }
            }
            if(isset($param['like'])){
                foreach ($param['like'] as $key => $val){
                    if (!empty($val)) $this->db->like($key, $val);
                }
            }
            if(isset($param['in'])){
                foreach ($param['in'] as $key => $val){
                    if (!empty($val)) $this->db->where_in($key, $val);
                }
            }
            if(isset($param['customStr'])){
                if (!empty($val)) $this->db->where($param['customStr']);
            }
        }
        /**
         * 新增信息
         * @param string $table  表名称
         * @param array  $param  数据变量
         * @return INT ID 
         */
        public function add($table = '', $param = array())
        {
            if(empty($table) || !is_array($param) || empty ($param)){
                return FALSE;
            }
            
            //写入数据表        
            $this->db->insert($table, $param);
               array_push($this -> errors,$this->db->last_query());
            //返回记录ID
            return $this->db->insert_id();
        }
    
       /**
         * 更新分类信息
         * @param string    $table      表名称
         * @param string    $primary    表主键
         * @param int       $id         分类ID
         * @param array     $param      更新的数据
         * @return type 
         */
        public function update($table = '', $primary = '', $id = 0, $param = array())
        {
            if(empty($table) || empty($primary) || empty($param) || empty($id))
            {
                return FALSE;
            }
    
            $id = (int)$id;
            $this->db->where($primary, $id)
                     ->limit(1)
                     ->update($table, $param);  
            array_push($this -> errors,$this->db->last_query());      
            return $this->db->affected_rows();        
        }   
      
       /**
         * 删除指定ID记录
         * @param string    $table      表名称
         * @param string    $primary    表主键
         * @param array     $id         分类ID
         * @return int
         */
        public function delete($table = '', $primary = '', $id = array()){             
           if(empty($table) || empty($primary) || empty($id)){
                return FALSE;
           }
           $this->db->where_in($primary, $id)
                    ->delete($table);
           array_push($this -> errors,$this->db->last_query());
           return $this->db->affected_rows();      
        }
        
        /**
         * 获取表的主键
         * @param string    $database   数据库名称
         * @param strting   $table      表名称
         */
        public  function getPrimary($table = '', $database = self::dataBase)
        {
            if(empty($database) || empty($table))
            {
                return FALSE;
            }
            $sql = "SELECT k.column_name
                    FROM information_schema.table_constraints t
                    JOIN information_schema.key_column_usage k
                    USING (constraint_name,table_schema,table_name)
                    WHERE t.constraint_type='PRIMARY KEY'
                      AND t.table_schema='qndnew'
                      AND t.table_name='qnd_user'";
            $query = $this->db->query($sql)->result_array();
            return isset($query[0]['column_name']) ? $query[0]['column_name'] : false;
        }
        /**
         * debug sql语句
         */
        public function debugSql(){
            if(count($this->errors) > 0){
                foreach($this->errors as $val){
                    echo $val.'<br>';
                }
            }
        }
    }

    具体的业务逻辑模型如下:

    class User_model extends My_model {
    
        const USER = 'qnd_user';
        public $selectFields = array(
            'id',
            'guid',
            'phone',
            'userName',
            'password',
            'headPortraits',
            'nickName',
            'createTime',
        );
        const SMS_ROLE = 'qnd_role';
        public function __construct()
        {
           
        }
    }

    控制器中测试如下:

    public function modelTest(){
            $this -> load -> model('User_model'); // 載入 model
            $whereArr = array(
                            'compare'=>array(
                                'userName' => 'Frank',
                            ),
                            
                            
                        );
            $rs = $this -> User_model -> pageData('User_model','user',$whereArr);
            print_r($rs);
            $this -> User_model -> debugSql();
        }
  • 相关阅读:
    C 语言
    How does Chrome Extension crx Downloader work? ——— From crxdown.com
    做作业时看到的 Demo
    IDEA 插件收集
    [E] Shiro 官方文档阅读笔记 The Reading Notes of Shiro's Offical Docs
    烦人的 Python 依赖
    机器学习之路--Numpy
    机器学习之路--朴素贝叶斯
    机器学习之路--决策树
    机器学习之路--KNN算法
  • 原文地址:https://www.cnblogs.com/kangjianrong/p/5865442.html
Copyright © 2011-2022 走看看