<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2017 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace think\db;
use PDO;
use think\Cache;
use think\Collection;
use think\Config;
use think\Db;
use think\db\exception\BindParamException;
use think\db\exception\DataNotFoundException;
use think\db\exception\ModelNotFoundException;
use think\Exception;
use think\exception\DbException;
use think\exception\PDOException;
use think\Loader;
use think\Model;
use think\model\Relation;
use think\model\relation\OneToOne;
use think\Paginator;
class Query
{
// 数据库Connection对象实例
protected $connection;
// 数据库Builder对象实例
protected $builder;
// 当前模型类名称
protected $model;
// 当前数据表名称(含前缀)
protected $table = '';
// 当前数据表名称(不含前缀)
protected $name = '';
// 当前数据表主键
protected $pk;
// 当前数据表前缀
protected $prefix = '';
// 查询参数
protected $options = [];
// 参数绑定
protected $bind = [];
// 数据表信息
protected static $info = [];
// 回调事件
private static $event = [];
/**
* 构造函数
* @access public
* @param Connection $connection 数据库对象实例
* @param string $model 模型名
*/
public function __construct(Connection $connection = null, $model = '')
{
$this->connection = $connection ?: Db::connect([], true);
$this->prefix = $this->connection->getConfig('prefix');
$this->model = $model;
// 设置当前连接的Builder对象
$this->setBuilder();
}
/**
* 利用__call方法实现一些特殊的Model方法
* @access public
* @param string $method 方法名称
* @param array $args 调用参数
* @return mixed
* @throws DbException
* @throws Exception
*/
public function __call($method, $args)
{
if (strtolower(substr($method, 0, 5)) == 'getby') {
// 根据某个字段获取记录
$field = Loader::parseName(substr($method, 5));
$where[$field] = $args[0];
return $this->where($where)->find();
} elseif (strtolower(substr($method, 0, 10)) == 'getfieldby') {
// 根据某个字段获取记录的某个值
$name = Loader::parseName(substr($method, 10));
$where[$name] = $args[0];
return $this->where($where)->value($args[1]);
} else {
throw new Exception('method not exist:' . __CLASS__ . '->' . $method);
}
}
/**
* 获取当前的数据库Connection对象
* @access public
* @return Connection
*/
public function getConnection()
{
return $this->connection;
}
/**
* 切换当前的数据库连接
* @access public
* @param mixed $config
* @return $this
*/
public function connect($config)
{
$this->connection = Db::connect($config);
$this->setBuilder();
return $this;
}
/**
* 设置当前的数据库Builder对象
* @access protected
* @return void
*/
protected function setBuilder()
{
$class = $this->connection->getBuilder();
$this->builder = new $class($this->connection, $this);
}
/**
* 获取当前的模型对象名
* @access public
* @return string
*/
public function getModel()
{
return $this->model;
}
/**
* 获取当前的builder实例对象
* @access public
* @return Builder
*/
public function getBuilder()
{
return $this->builder;
}
/**
* 指定默认的数据表名(不含前缀)
* @access public
* @param string $name
* @return $this
*/
public function name($name)
{
$this->name = $name;
return $this;
}
/**
* 指定默认数据表名(含前缀)
* @access public
* @param string $table 表名
* @return $this
*/
public function setTable($table)
{
$this->table = $table;
return $this;
}
/**
* 得到当前或者指定名称的数据表
* @access public
* @param string $name
* @return string
*/
public function getTable($name = '')
{
if ($name || empty($this->table)) {
$name = $name ?: $this->name;
$tableName = $this->prefix;
if ($name) {
$tableName .= Loader::parseName($name);
}
} else {
$tableName = $this->table;
}
return $tableName;
}
/**
* 将SQL语句中的__TABLE_NAME__字符串替换成带前缀的表名(小写)
* @access public
* @param string $sql sql语句
* @return string
*/
public function parseSqlTable($sql)
{
if (false !== strpos($sql, '__')) {
$prefix = $this->prefix;
$sql = preg_replace_callback("/__([A-Z0-9_-]+)__/sU", function ($match) use ($prefix) {
return $prefix . strtolower($match[1]);
}, $sql);
}
return $sql;
}
/**
* 执行查询 返回数据集
* @access public
* @param string $sql sql指令
* @param array $bind 参数绑定
* @param boolean $master 是否在主服务器读操作
* @param bool|string $class 指定返回的数据集对象
* @return mixed
* @throws BindParamException
* @throws PDOException
*/
public function query($sql, $bind = [], $master = false, $class = false)
{
return $this->connection->query($sql, $bind, $master, $class);
}
/**
* 执行语句
* @access public
* @param string $sql sql指令
* @param array $bind 参数绑定
* @return int
* @throws BindParamException
* @throws PDOException
*/
public function execute($sql, $bind = [])
{
return $this->connection->execute($sql, $bind);
}
/**
* 获取最近插入的ID
* @access public
* @param string $sequence 自增序列名
* @return string
*/
public function getLastInsID($sequence = null)
{
return $this->connection->getLastInsID($sequence);
}
/**
* 获取最近一次查询的sql语句
* @access public
* @return string
*/
public function getLastSql()
{
return $this->connection->getLastSql();
}
/**
* 执行数据库事务
* @access public
* @param callable $callback 数据操作方法回调
* @return mixed
*/
public function transaction($callback)
{
return $this->connection->transaction($callback);
}
/**
* 启动事务
* @access public
* @return void
*/
public function startTrans()
{
$this->connection->startTrans();
}
/**
* 用于非自动提交状态下面的查询提交
* @access public
* @return void
* @throws PDOException
*/
public function commit()
{
$this->connection->commit();
}
/**
* 事务回滚
* @access public
* @return void
* @throws PDOException
*/
public function rollback()
{
$this->connection->rollback();
}
/**
* 批处理执行SQL语句
* 批处理的指令
没有合适的资源?快使用搜索试试~ 我知道了~
建站管家多语言企业建站系统 TP5.0.7_20170430
共1317个文件
png:336个
php:309个
js:157个
需积分: 10 9 下载量 111 浏览量
2019-10-22
17:29:05
上传
评论
收藏 16.29MB ZIP 举报
温馨提示
《建站管家》ThinkPHP5.0.7版本介绍:1、基于ThinkPHP5.0.7的多语言企业建站系统2、可自行扩展多语言(默认中英文)3、前台及后台均支持手机版+电脑版4、自定义URL前缀5、多级分类6、整合Ueditor,水印裁切图片后台可设置7、简单自定义标签8、关键词站内链接9、参数设置、数据库备份、多级地区......10、前台模板可以做成自适应或者电脑端和手机端模板分离11、完全开源、支持二次开发。。。。。。
资源推荐
资源详情
资源评论
收起资源包目录
建站管家多语言企业建站系统 TP5.0.7_20170430 (1317个子文件)
test.bmp 0B
web.config 1KB
components-rounded.min.css 493KB
bootstrap.min.css 120KB
bootstrap.min.css 120KB
bootstrap.min.css 120KB
bootstrap.min.css 120KB
bootstrap.min.css 115KB
jquery.minicolors.css 106KB
layout.min.css 66KB
style.css 60KB
style.css 60KB
style.css 60KB
style.css 60KB
ueditor.css 45KB
mobile.ueditor.css 45KB
plugins.min.css 39KB
ueditor.min.css 34KB
darkblue.min.css 30KB
font-awesome.min.css 26KB
font-awesome.min.css 23KB
font-awesome.min.css 23KB
font-awesome.min.css 23KB
font-awesome.min.css 23KB
video-js.css 22KB
style-shop.css 21KB
style-shop.css 21KB
style-shop.css 21KB
style-shop.css 21KB
image.css 19KB
mobile.image.css 19KB
style-responsive.css 16KB
style-responsive.css 16KB
style-responsive.css 16KB
style-responsive.css 16KB
select2-bootstrap.min.css 15KB
video.css 15KB
components.css 15KB
components.css 15KB
components.css 15KB
components.css 15KB
attachment.css 15KB
mobile.attachment.css 15KB
select2.min.css 15KB
flickity-docs.css 14KB
flickity-docs.css 14KB
flickity-docs.css 14KB
flickity-docs.css 14KB
video-js.min.css 11KB
simple-line-icons.min.css 9KB
bootstrap-datetimepicker.min.css 9KB
uniform.default.min.css 8KB
turquoise.css 8KB
gray.css 8KB
blue.css 8KB
gray.css 8KB
turquoise.css 8KB
gray.css 8KB
blue.css 8KB
blue.css 8KB
turquoise.css 8KB
gray.css 8KB
blue.css 8KB
turquoise.css 8KB
green.css 8KB
green.css 8KB
green.css 8KB
green.css 8KB
orange.css 8KB
orange.css 8KB
orange.css 8KB
orange.css 8KB
red.css 8KB
red.css 8KB
red.css 8KB
red.css 8KB
bootstrap-switch.min.css 6KB
bootstrap-select.min.css 6KB
owl.carousel.css 5KB
owl.carousel.css 5KB
owl.carousel.css 5KB
owl.carousel.css 5KB
jquery.fancybox.css 4KB
jquery.fancybox.css 4KB
jquery.fancybox.css 4KB
jquery.fancybox.css 4KB
scrawl.css 4KB
codemirror.css 3KB
charts.css 3KB
background.css 2KB
kefu.css 2KB
kefu.css 2KB
kefu.css 2KB
kefu.css 2KB
login-4.min.css 2KB
emotion.css 2KB
normalize.css 2KB
normalize.css 2KB
normalize.css 2KB
normalize.css 2KB
共 1317 条
- 1
- 2
- 3
- 4
- 5
- 6
- 14
资源评论
weixin_38743968
- 粉丝: 404
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功