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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。