<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2018 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\App;
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 = [];
// 读取主库
protected static $readMaster = [];
/**
* 构造函数
* @access public
* @param Connection $connection 数据库对象实例
* @param Model $model 模型对象
*/
public function __construct(Connection $connection = null, $model = null)
{
$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]);
} elseif ($this->model && method_exists($this->model, 'scope' . $method)) {
// 动态调用命名范围
$method = 'scope' . $method;
array_unshift($args, $this);
call_user_func_array([$this->model, $method], $args);
return $this;
} 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();
$this->prefix = $this->connection->getConfig('prefix');
return $this;
}
/**
* 设置当前的数据库Builder对象
* @access protected
* @return void
*/
protected function setBuilder()
{
$class = $this->connection->getBuilder();
$this->builder = new $class($this->connection, $this);
}
/**
* 获取当前的模型对象实例
* @access public
* @return Model|null
*/
public function getModel()
{
return $this->model;
}
/**
* 设置后续从主库读取数据
* @access public
* @param bool $allTable
* @return void
*/
public function readMaster($allTable = false)
{
if ($allTable) {
$table = '*';
} else {
$table = isset($this->options['table']) ? $this->options['table'] : $this->getTable();
}
static::$readMaster[$table] = true;
return $this;
}
/**
* 获取当前的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, $this);
}
/**
* 获取最近插入的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();
}
/**
没有合适的资源?快使用搜索试试~ 我知道了~
在线订餐源码-超级外卖单店铺SuperCms最新版
共663个文件
php:228个
html:127个
jpg:77个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 170 浏览量
2023-07-10
21:05:38
上传
评论
收藏 4.19MB RAR 举报
温馨提示
在线订餐源码_超级外卖单店铺SuperCms2.1版。一款功能强大且易于使用的系统,适合餐饮行业中的单店铺外卖业务。它提供了一套完整的管理和展示工具,让您可以轻松管理菜单、处理订单,并与顾客进行有效的沟通。此外,它还支持文章和单页模块,为您搭建一个全面信息化的在线订餐平台。 安装该系统非常简便,您只需按照提供的安装教程进行步骤操作,即可快速上线使用。无论是小型还是中型餐饮店铺,SuperCms在线订餐系统都能满足您的需求,并提供出色的用户体验。 该系统采用响应式设计的模板,能够自动适应手机、电脑和平板等设备的显示,完全满足单一店铺的外卖需求。 系统功能包括: 1.菜单分类管理 2.菜品管理:支持菜品的增加、删除和修改操作 3.订单管理 4.友情链接管理 5.数据库备份 6.文章模块:例如促销活动、帮助中心等 7.单页模块:例如企业信息、关于我们等
资源推荐
资源详情
资源评论
收起资源包目录
在线订餐源码-超级外卖单店铺SuperCms最新版 (663个子文件)
s3.php.bak 10KB
jquery.cityselect.js.bak 4KB
orderdetail.html.bak 2KB
bootstrap.css 120KB
bootstrap.min.css 99KB
bootstrap.min.css 98KB
bootstrap.min.css 98KB
ueditor.css 41KB
ueditor.min.css 33KB
font-awesome.css 22KB
font-awesome.css 22KB
video-js.css 21KB
font-awesome.min.css 18KB
font-awesome.min.css 18KB
bootstrap-theme.css 15KB
bootstrap-theme.css 15KB
bootstrap-theme.css 14KB
bootstrap-theme.min.css 13KB
bootstrap-theme.min.css 13KB
bootstrap-theme.min.css 13KB
style.css 11KB
login.css 11KB
video-js.min.css 11KB
install.css 10KB
css.css 10KB
shCoreDefault.css 7KB
admin.css 6KB
video.css 4KB
codemirror.css 3KB
image.css 2KB
cart-min.css 2KB
复件 cart-min.css 2KB
复件 (2) cart-min.css 2KB
cart-min.css 2KB
emotion.css 2KB
cart.css 2KB
dialogbase.css 2KB
edittable.css 1KB
print.css 613B
iframe.css 41B
.env 260B
.env 100B
fontawesome-webfont.eot 37KB
fontawesome-webfont.eot 37KB
glyphicons-halflings-regular.eot 20KB
glyphicons-halflings-regular.eot 20KB
glyphicons-halflings-regular.eot 20KB
vjs.eot 3KB
hiddeninput.exe 9KB
wface.gif 49KB
jxface2.gif 40KB
ajax-loading.gif 29KB
yface.gif 28KB
ajax-modal-loading.gif 27KB
bface.gif 27KB
icons.gif 20KB
tface.gif 19KB
fface.gif 18KB
cface.gif 8KB
print_icon.gif 5KB
index.gif 5KB
icons-all.gif 4KB
loading.gif 3KB
videologo.gif 2KB
cancelbutton.gif 1KB
button-bg.gif 1KB
lock.gif 1KB
word.gif 1019B
loading.gif 875B
pop_loading.gif 723B
cursor_v.gif 370B
cursor_h.gif 253B
avatar.gif 249B
anchor.gif 184B
unhighlighted.gif 111B
highlighted.gif 111B
pagebreak.gif 54B
spacer.gif 43B
0.gif 43B
.gitignore 39B
.htaccess 13B
index.html 13KB
image.html 12KB
index.html 10KB
index1.html 10KB
index0.html 10KB
index4.html 10KB
index3.html 10KB
index2.html 10KB
index3.html 10KB
index-bak.html 8KB
index.html 8KB
index.html 7KB
edit.html 7KB
index.html 6KB
add.html 6KB
edit.html 6KB
edit.html 6KB
map.html 6KB
edit.html 6KB
共 663 条
- 1
- 2
- 3
- 4
- 5
- 6
- 7
资源评论
如鹿觅水
- 粉丝: 178
- 资源: 376
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功