<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace Think;
/**
* ThinkPHP Model模型类
* 实现了ORM和ActiveRecords模式
*/
class Model {
// 操作状态
const MODEL_INSERT = 1; // 插入模型数据
const MODEL_UPDATE = 2; // 更新模型数据
const MODEL_BOTH = 3; // 包含上面两种方式
const MUST_VALIDATE = 1; // 必须验证
const EXISTS_VALIDATE = 0; // 表单存在字段则验证
const VALUE_VALIDATE = 2; // 表单值不为空则验证
// 当前数据库操作对象
protected $db = null;
// 数据库对象池
private $_db = array();
// 主键名称
protected $pk = 'id';
// 主键是否自动增长
protected $autoinc = false;
// 数据表前缀
protected $tablePrefix = null;
// 模型名称
protected $name = '';
// 数据库名称
protected $dbName = '';
//数据库配置
protected $connection = '';
// 数据表名(不包含表前缀)
protected $tableName = '';
// 实际数据表名(包含表前缀)
protected $trueTableName = '';
// 最近错误信息
protected $error = '';
// 字段信息
protected $fields = array();
// 数据信息
protected $data = array();
// 查询表达式参数
protected $options = array();
protected $_validate = array(); // 自动验证定义
protected $_auto = array(); // 自动完成定义
protected $_map = array(); // 字段映射定义
protected $_scope = array(); // 命名范围定义
// 是否自动检测数据表字段信息
protected $autoCheckFields = true;
// 是否批处理验证
protected $patchValidate = false;
// 链操作方法列表
protected $methods = array('strict','order','alias','having','group','lock','distinct','auto','filter','validate','result','token','index','force');
/**
* 架构函数
* 取得DB类的实例对象 字段检查
* @access public
* @param string $name 模型名称
* @param string $tablePrefix 表前缀
* @param mixed $connection 数据库连接信息
*/
public function __construct($name='',$tablePrefix='',$connection='') {
// 模型初始化
$this->_initialize();
// 获取模型名称
if(!empty($name)) {
if(strpos($name,'.')) { // 支持 数据库名.模型名的 定义
list($this->dbName,$this->name) = explode('.',$name);
}else{
$this->name = $name;
}
}elseif(empty($this->name)){
$this->name = $this->getModelName();
}
// 设置表前缀
if(is_null($tablePrefix)) {// 前缀为Null表示没有前缀
$this->tablePrefix = '';
}elseif('' != $tablePrefix) {
$this->tablePrefix = $tablePrefix;
}elseif(!isset($this->tablePrefix)){
$this->tablePrefix = C('DB_PREFIX');
}
// 数据库初始化操作
// 获取数据库操作对象
// 当前模型有独立的数据库连接信息
$this->db(0,empty($this->connection)?$connection:$this->connection,true);
}
/**
* 自动检测数据表信息
* @access protected
* @return void
*/
protected function _checkTableInfo() {
// 如果不是Model类 自动记录数据表信息
// 只在第一次执行记录
if(empty($this->fields)) {
// 如果数据表字段没有定义则自动获取
if(C('DB_FIELDS_CACHE')) {
$db = $this->dbName?:C('DB_NAME');
$fields = F('_fields/'.strtolower($db.'.'.$this->tablePrefix.$this->name));
if($fields) {
$this->fields = $fields;
if(!empty($fields['_pk'])){
$this->pk = $fields['_pk'];
}
return ;
}
}
// 每次都会读取数据表信息
$this->flush();
}
}
/**
* 获取字段信息并缓存
* @access public
* @return void
*/
public function flush() {
// 缓存不存在则查询数据表信息
$this->db->setModel($this->name);
$fields = $this->db->getFields($this->getTableName());
if(!$fields) { // 无法获取字段信息
return false;
}
$this->fields = array_keys($fields);
unset($this->fields['_pk']);
foreach ($fields as $key=>$val){
// 记录字段类型
$type[$key] = $val['type'];
if($val['primary']) {
// 增加复合主键支持
if (isset($this->fields['_pk']) && $this->fields['_pk'] != null) {
if (is_string($this->fields['_pk'])) {
$this->pk = array($this->fields['_pk']);
$this->fields['_pk'] = $this->pk;
}
$this->pk[] = $key;
$this->fields['_pk'][] = $key;
} else {
$this->pk = $key;
$this->fields['_pk'] = $key;
}
if($val['autoinc']) $this->autoinc = true;
}
}
// 记录字段类型信息
$this->fields['_type'] = $type;
// 2008-3-7 增加缓存开关控制
if(C('DB_FIELDS_CACHE')){
// 永久缓存数据表信息
$db = $this->dbName?:C('DB_NAME');
F('_fields/'.strtolower($db.'.'.$this->tablePrefix.$this->name),$this->fields);
}
}
/**
* 设置数据对象的值
* @access public
* @param string $name 名称
* @param mixed $value 值
* @return void
*/
public function __set($name,$value) {
// 设置数据对象属性
$this->data[$name] = $value;
}
/**
* 获取数据对象的值
* @access public
* @param string $name 名称
* @return mixed
*/
public function __get($name) {
return isset($this->data[$name])?$this->data[$name]:null;
}
/**
* 检测数据对象的值
* @access public
* @param string $name 名称
* @return boolean
*/
public function __isset($name) {
return isset($this->data[$name]);
}
/**
* 销毁数据对象的值
* @access public
* @param string $name 名称
* @return void
*/
public function __unset($name) {
unset($this->data[$name]);
}
/**
* 利用__call方法实现一些特殊的Model方法
* @access public
* @param string $method 方法名称
* @param array $args 调用参数
* @return mixed
*/
public function __call($method,$args) {
if(in_array(strtolower($method),$this->methods,true)) {
// 连贯操作的实现
$this->options[strtolower($method)] = $args[0];
return $this;
}elseif(in_array(strtolower($method),array('count','sum','min','max','avg'),true)){
没有合适的资源?快使用搜索试试~ 我知道了~
免费开源在线客服系统PHP版.zip
共466个文件
php:159个
js:81个
log:65个
0 下载量 98 浏览量
2024-01-18
11:41:58
上传
评论
收藏 2.14MB ZIP 举报
温馨提示
软件开发设计:PHP、应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、存储设备、移动设备等 操作系统:LInux、IOS、树莓派、安卓开发、微机操作系统、网络操作系统、分布式操作系统等。此外,还有嵌入式操作系统、智能操作系统等。 网络与通信:数据传输、信号处理、网络协议、网络与通信硬件、网络安全网络与通信是一个非常广泛的领域,它涉及到计算机科学、电子工程、数学等多个学科的知识。 云计算与大数据:数据集、包括云计算平台、大数据分析、人工智能、机器学习等,云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需提供给计算机和其他设备。
资源推荐
资源详情
资源评论
收起资源包目录
免费开源在线客服系统PHP版.zip (466个子文件)
start_b.bat 125B
zui.css 163KB
zui.min.css 138KB
zui-brown-theme.css 33KB
zui-yellow-theme.css 33KB
zui-red-theme.css 33KB
zui-default-theme.css 33KB
zui-blue-theme.css 33KB
zui-purple-theme.css 33KB
zui-bluegrey-theme.css 33KB
zui-indigo-theme.css 33KB
zui-green-theme.css 33KB
zui-black-theme.css 32KB
default.css 22KB
kindeditor.css 21KB
kindeditor.min.css 17KB
chosen.css 10KB
chosen.min.css 9KB
datetimepicker.css 5KB
zui.datatable.css 5KB
common.css 5KB
datetimepicker.min.css 5KB
client.css 4KB
zui.datatable.min.css 4KB
zui.calendar.css 3KB
zui.imgcutter.css 3KB
zui.calendar.min.css 3KB
zui.imgcutter.min.css 2KB
zui.board.css 2KB
home.css 2KB
zui.board.min.css 2KB
chosen.icons.min.css 709B
prettify.css 675B
chosen.icons.css 629B
webuploader.css 515B
zenicon.eot 78KB
load.gif 4KB
pdf.gif 1KB
img.gif 621B
zip.gif 604B
swf.gif 446B
att.gif 213B
mov.gif 212B
xls.gif 132B
doc.gif 127B
ppt.gif 122B
oth.gif 86B
.gitignore 56B
.gitignore 56B
.htaccess 203B
index.html 8KB
index.html 8KB
index.html 7KB
pc.html 7KB
index.html 7KB
register.html 6KB
login.html 5KB
index.html 5KB
layout.html 5KB
layout.html 5KB
index.html 4KB
edit.html 3KB
index.html 2KB
layout.html 2KB
feedback.html 2KB
index.html 2KB
preview.html 2KB
product.html 1KB
index.html 1KB
demo.html 1KB
index.html 1KB
index.html 1B
index.html 1B
index.html 1B
index.html 1B
index.html 1B
index.html 1B
index.html 1B
index.html 1B
index.html 1B
index.html 1B
index.html 1B
index.html 1B
index.html 1B
index.html 1B
index.html 1B
index.html 1B
index.html 1B
index.html 1B
index.html 1B
index.html 1B
index.html 1B
index.html 1B
index.html 1B
index.html 1B
index.html 1B
index.html 1B
index.html 1B
index.html 1B
index.html 1B
共 466 条
- 1
- 2
- 3
- 4
- 5
资源评论
妄北y
- 粉丝: 2w+
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 15-面试题库(14个维度选拔考查).doc
- 28-绝对必备:HR经理面试提问大全(100问).doc
- 25-100个最权威的招聘面试题及回答解析.doc
- 27-HR经理常用的21个经典面试问题.doc
- 21-HR经理面试问题样例大全(30余种能力考查).doc
- 23-《职业测评--职场成功测评之完整题库》附答案.doc
- 26-200个名企的面试题详解(微软+谷歌+联合利华).doc
- 22-101个面试难题及结构化面试题库(附点评).doc
- 31-世界五百强面试题目及应答评点(全套50题).doc
- 30-面试通用题库以及压力测试.doc
- 29-面试通关秘笈:面试过程中常见的刁钻问题汇总.docx
- 32-招聘专员必备《HR结构化面试题库大全及解析》.doc
- python条件语句和高级应用
- 金属拉链穿头机(sw10可编辑+工程图)全套技术资料100%好用.zip
- 家具设备1出2三角木头机(sw18可逼哪家+工程图+BOM)全套技术资料100%好用.zip
- 1-销售面试题.xls
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功