CI框架(CodeIgniter)公共模型类定义与用法示例
本文实例讲述了CI框架(CodeIgniter)公共模型类定义与用法。分享给大家供大家参考,具体如下:
我们都知道,操作数据库的方法都写在模型中。但是一般情况下,一张表往往至少对应4个操作,也就是所谓crud。那么如果20张表,所对应的模型方法,就达到了80个,重复的操作显然这已经是一个体力活儿。
那么就对单表操作时,我们进行一下简单的封装。如下是ci框架的示例:
$val)$key为要操作的字段,$val为要操作的值 *array('name!='=>$name,'id<'=>$id,'date>'=>$date); *like(模糊查询) *array('title'=>$match,'page1'=>$match,'page2'=>$match) *customStr(自定义字符串): *"name='Joe'ANDstatus='boss'ORstatus='active'" *in: *array('userName'=>array('Frank','Todd','James')) *@paramstring$page当前页数(查询全部数据时,设置为空) *@paramstring$limit查询条数(查询全部数据时,设置为空) *@paramarray$order排序条件: *array($key=>$val) *$key为排序依据的字段, *$val为排序的方式【asc(升序,默认)或desc(降序),或random(随机)】 *@$isReturnCountboole是否返回总条数 *@returnarray|boolean * */ publicfunctionpageData($model,$table,$param=array(),$select_fields='',$page='1',$limit='15',$order=array(),$isReturnCount=true){ if(empty($model)||empty($table)){ returnfalse; } $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($orderas$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; } /** *解析参数 */ privatefunctionparseParam($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']); } } /** *新增信息 *@paramstring$table表名称 *@paramarray$param数据变量 *@returnINTID */ publicfunctionadd($table='',$param=array()) { if(empty($table)||!is_array($param)||empty($param)){ returnFALSE; } //写入数据表 $this->db->insert($table,$param); array_push($this->errors,$this->db->last_query()); //返回记录ID return$this->db->insert_id(); } /** *更新分类信息 *@paramstring$table表名称 *@paramstring$primary表主键 *@paramint$id分类ID *@paramarray$param更新的数据 *@returntype */ publicfunctionupdate($table='',$primary='',$id=0,$param=array()) { if(empty($table)||empty($primary)||empty($param)||empty($id)) { returnFALSE; } $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记录 *@paramstring$table表名称 *@paramstring$primary表主键 *@paramarray$id分类ID *@returnint */ publicfunctiondelete($table='',$primary='',$id=array()){ if(empty($table)||empty($primary)||empty($id)){ returnFALSE; } $this->db->where_in($primary,$id) ->delete($table); array_push($this->errors,$this->db->last_query()); return$this->db->affected_rows(); } /** *获取表的主键 *@paramstring$database数据库名称 *@paramstrting$table表名称 */ publicfunctiongetPrimary($table='',$database=self::dataBase) { if(empty($database)||empty($table)) { returnFALSE; } $sql="SELECTk.column_name FROMinformation_schema.table_constraintst JOINinformation_schema.key_column_usagek USING(constraint_name,table_schema,table_name) WHEREt.constraint_type='PRIMARYKEY' ANDt.table_schema='qndnew' ANDt.table_name='qnd_user'"; $query=$this->db->query($sql)->result_array(); returnisset($query[0]['column_name'])?$query[0]['column_name']:false; } /** *debugsql语句 */ publicfunctiondebugSql(){ if(count($this->errors)>0){ foreach($this->errorsas$val){ echo$val.'
'; } } } }
具体的业务逻辑模型如下:
classUser_modelextendsMy_model{ constUSER='qnd_user'; public$selectFields=array( 'id', 'guid', 'phone', 'userName', 'password', 'headPortraits', 'nickName', 'createTime', ); constSMS_ROLE='qnd_role'; publicfunction__construct() { } }
控制器中测试如下:
publicfunctionmodelTest(){ $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(); }
更多关于CodeIgniter相关内容感兴趣的读者可查看本站专题:《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《php优秀开发框架总结》、《ThinkPHP入门教程》、《ThinkPHP常用方法总结》、《ZendFrameWork框架入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于CodeIgniter框架的PHP程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。