<?php   if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* SEO管理系统 -- 公用模型
* @author yangheping
* @since 2013/11/11
*/
class Common_model extends CI_Model{ public function __construct()
{
parent::__construct();
$this->load->database();
} /**
* 分页数据查询
* 功能:
* 一、查询条件分页总数
* 二、查询条件分页数据信息
* @param string $table 表名称
* @param array $param 查询条件:
* array($key => $val) $key为要操作的字段,$val为要操作的值
* @param string $type 为total返回总数,range为返回对应数据
* @param string $show_field 为需要查询的字段
* @param array $order 排序条件:
* array($key => $val)
* $key为排序依据的字段,
* $val为排序的方式【asc (升序,默认)或 desc(降序), 或 random(随机)】
* @return int 或 array
*/
public function pageData($table = '', $param = array(), $type = 'total', $show_field = '*', $order = array())
{ if(empty($table))
{
return FALSE;
} $limit = (int)$param['limit'];
$page = (int)$param['page']; //开始查询的ID,在CI分页中 $not_table_column_arr = array('limit', 'page'); //处理查询条件的组合
if (!empty($param) && is_array($param)) {
foreach($param as $key => $val){
if(!empty($val) && ($val != 'n') && !in_array($key, $not_table_column_arr))
{
$this->db->where($key, $val);
}
}
} //排序规则的组合
if (!empty($order) && is_array($order))
{
foreach ($order as $key => $val)
{
$this->db->order_by($key, $val);
}
}else{ //默认按照此表的主键倒序
$primary_arr = $this->getPrimary('hf_seo', $table);
if(!empty($primary_arr))
{
$this->db->order_by($primary_arr[0]->COLUMN_NAME, 'DESC');
}
} $this->db->select($show_field)
->from($table); //求条件下总数
if( $type == 'total' )
{
return $this->db->count_all_results();
} //返回当前分页数据
if( $type == 'range' )
{
//分页边界值 设置
$limit_start = $page <= 1 ? 0 : ($page-1)*$limit;
$this->db->limit($limit, $limit_start);
$query = $this->db->get();
// return $this->db->last_query(); //返回组合后的SQL语句
return $query->result_object();
} return FALSE;
} /**
* 新增信息
* @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); //返回记录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);
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); return $this->db->affected_rows();
} /**
* 多字段条件查询数据
* @param string $table 表名称
* @param array $param 查询条件:
* array($key => $val) $key为要操作的字段,$val为要操作的值
* @param int $limit 数据数目
* @param int $offset 开始位置
* @param string $show_field 要显示字段
* @param array $order 排序条件:
* array($key => $val)
* $key为排序依据的字段,
* $val为排序的方式【asc (升序,默认)或 desc(降序), 或 random(随机)】
* @return array|boolean
*/
public function search($table = '', $param = array(), $limit = null, $offset = null, $show_field = '*', $order = array())
{
if(empty($table))
{
return FALSE;
} $this->db->select($show_field); if (is_array($param) && count($param) > 0)
{
foreach ($param as $key => $val)
{
if (!empty($key))
{
$this->db->where($key, $val);
}
}
} if (!empty($order) && is_array($order))
{
foreach ($order as $key => $val)
{
$this->db->order_by($key, $val);
}
} if( is_numeric($limit) )
{
$limit = intval($limit);
} else {
$limit = null;
} if( is_numeric($offset) )
{
$offset = intval($offset);
} else{
$offset = null;
} $query = $this->db->get($table, $limit, $offset);
return $query->num_rows() > 0 ? $query->result_object() : FALSE; return FALSE;
} /**
* 获取表的主键
* @param string $database 数据库名称
* @param strting $table 表名称
*/
public function getPrimary($database = '', $table = '')
{
if(empty($database) || empty($table))
{
return FALSE;
} $this->db->select('c.COLUMN_NAME')
->from('INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS t')
->join('INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS c', 't.TABLE_NAME = c.TABLE_NAME' , 'left')
->where('t.TABLE_SCHEMA', $database)
->where('t.TABLE_NAME', $table)
->where('t.CONSTRAINT_TYPE', 'PRIMARY KEY'); $query = $this->db->get();
return $query->result_object();
} } /* End of file Common_model.php */
/* Location: ./application/models/admin/Common_model.php */

CI公用模型的更多相关文章

  1. ci公共模型类

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

  2. CI框架(一)

    CI工作流程:        所有的入口都从根目录下的index.php进入,确定应用所在目录后,加载 codeigniter/CodeIgniter.php 文件,该文件会顺序加载以下文件执行整个流 ...

  3. CI框架 简介

    CI工作流程:        所有的入口都从根目录下的index.php进入,确定应用所在目录后,加载 codeigniter/CodeIgniter.php 文件,该文件会顺序加载以下文件执行整个流 ...

  4. [深度概念]·Attention Model(注意力模型)学习笔记

    此文源自一个博客,笔者用黑体做了注释与解读,方便自己和大家深入理解Attention model,写的不对地方欢迎批评指正.. 1.Attention Model 概述 深度学习里的Attention ...

  5. 学习codeIgniter的一点小感受

    用CI好几天了,最终还是放弃用CI做完整的项目,感觉CI在前后端的交互上还比较差,比如说用户表单验证,仍然是需要把数据提交给服务器之后才能显示逻辑判断的结果.而这一点明显是相对落后了. 但不可否认CI ...

  6. Gartner容器市场指南中国语境:容器成为新常态,灵雀云等本地厂商在选择中占据优势

    在2019年2月“ China Summary Translation: 'Market Guide for Container Management Software'”的报告中,Gartner认为 ...

  7. Unity中资源打包成Assetsbundle的资料整理

    最近在研究Unity中关于资源打包的东西,网上看了一堆资料,这里做个整合,说整合,其实也就是Ctrl-C + Ctrl-V,不是原创 首先为了尊重原创,先贴出原创者的文章地址: http://blog ...

  8. Unity资源Assetbundle

    转  Unity资源打包之Assetbundle 本文原创版权归 csdn janeky 所有,转载请详细注明原创作者及出处,以示尊重! 作者:janeky 原文:http://blog.csdn.n ...

  9. Unity资源打包之Assetbundle

    转  Unity资源打包之Assetbundle 本文原创版权归 csdn janeky 所有,转载请详细注明原创作者及出处,以示尊重! 作者:janeky 原文:http://blog.csdn.n ...

随机推荐

  1. Vue 渲染优先级

    当 v-if 与 v-for 一起使用时,v-for 具有比 v-if 更高的优先级.

  2. 重读金典------高质量C编程指南(林锐)-------第四章 表达式和基本语句

    4.1 运算符的优先级   规则:如果代码行中的运算符比较多,可用括号确定操作顺序.if((a|b)&&(a&c)) 4.2   复合表达式 规则:不要编写太复杂的复合表达式 ...

  3. 机器学习实战之K-Means算法

    一,引言 先说个K-means算法很高大上的用处,来开始新的算法学习.我们都知道每一届的美国总统大选,那叫一个竞争激烈.可以说,谁拿到了各个州尽可能多的选票,谁选举获胜的几率就会非常大.有人会说,这跟 ...

  4. 牛牛有一个鱼缸。鱼缸里面已经有n条鱼,每条鱼的大小为fishSize[i] (1 ≤ i ≤ n,均为正整数),牛牛现在想把新捕捉的鱼放入鱼缸。鱼缸内存在着大鱼吃小鱼的定律。经过观察,牛牛发现一条鱼A的大小为另外一条鱼B大小的2倍到10倍(包括2倍大小和10倍大小),鱼A会吃掉鱼B。考虑到这个,牛牛要放入的鱼就需要保证:1、放进去的鱼是安全的,不会被其他鱼吃掉 2、这条鱼放进去也不能吃掉其他鱼

    // ConsoleApplication5.cpp : 定义控制台应用程序的入口点. // #include<vector> #include<algorithm> #inc ...

  5. php开启pathinfo 模式

    pathinfo 模式 需要 php.ini 开启下面这个参数 cgi.fix_pathinfo=1 path_info模式:http://www.xxx.com/index.php/模块/方法   ...

  6. git for windows 无法结束node进程(windows下杀进程)

    问题 windows 系统下,如果用CMD命令行启动node服务,Ctrl + C 即可结束命令 git bash 用起来比命令行方便,但是Ctrl + C 并不会结束node服务,再次启动会报如下错 ...

  7. 如何创建虚拟硬盘 + os 读取硬盘参数代码

    [0]README 0.1) 本文旨在演示如何利用 bximage 创建虚拟硬盘: 0.2) 利用 os 读取硬盘参数, source code from orange's implemention ...

  8. 【Java并发编程实战】—–“J.U.C”:ReentrantLock之二lock方法分析

    前一篇博客简介了ReentrantLock的定义和与synchronized的差别,以下尾随LZ的笔记来扒扒ReentrantLock的lock方法.我们知道ReentrantLock有公平锁.非公平 ...

  9. C#定时检測子线程是否已经完毕

    C#定时检測子线程是否已经完毕 class Program { static void Main(string[] args) { //主线程中启动一个支线程,运行doSomething这种一个方法. ...

  10. python 基础 1.4 python运算符

    一. 布尔值: 1>True 2>False       二.关系运算符 “=” (a=b):把b的值赋给a.等号赋值   “==”(a==b): 判断a与b是否相等.返回Trule或Fl ...