**\think\Db的__callStatic方法调用自身的connect方法获得config配置对应的驱动数据库实例,如:** 继承至Connection类的 `\think\db\connector\Mysql`
### **举例:**
`\think\Db::table('think_user'); `则解析为
`self::connect()->table('think_user')` 再次解析为
`new \think\db\builder\Mysql()->table('think_user'); `
//而table方法是Query.php里的
//这个Query类是什么时候怎么加载上的?
//Connection.php有个__construct 和 __call
//当调用Mysql(Connection)类里的不存在的方法时__call调动getQuery实例化获取新的查询对象 而实例化的类是__construct时获取的
//即Db::table实际调用的是Query类的table方法
*****
~~~
Db:
static connect($config = [], $name = false) [Connection] 调用的是Connection下的connect方法
static clear() [void] 清除连接实例
connector/Mysql extends Connection:
getFields($tableName) [array] 取得数据表的字段信息
getTables($dbName = '')[array] 取得数据库的表信息
Connection:
getBuilder()[array] 获取当前连接器类对应的Builder类
fieldCase($info_arr)[array] 对返数据表字段信息进行大小写转换出来
getConfig($config = '')[mixed] 获取数据库的配置参数
setConfig($config, $value = '')[void] 设置数据库的配置参数
connect(array $config = [], $linkNum = 0, $autoConnection = false)[PDO] 连接数据库方法
free()[???] 释放查询结果
getPdo()[PDO|false] 获取PDO对象
query($sql, $bind = [], $master = false, $pdo = false)[mixed] 执行查询 返回数据集
execute($sql, $bind = [], Query $query = null)[int] 执行语句
getRealSql($sql, array $bind = [])[string] 根据参数绑定组装最终的SQL语句 便于调试
transaction($callback)[mixed] 执行数据库事务
startTrans()[bool|mixed] 启动事务
commit()[void] 用于非自动提交状态下面的查询提交
rollback()[void] 事务回滚
batchQuery($sqlArray = [], $bind = [], Query $query = null)[boolean] 批处理执行SQL语句 批处理的指令都认为是execute操作
getQueryTimes($execute = false)[integer] 获得查询次数
getExecuteTimes()[integer] 获得执行次数
close()[Connection自身] 关闭数据库(或者重新连接)
getLastSql()[string] 获取最近一次查询的sql语句
getLastInsID($sequence = null)[string] 获取最近插入的ID
getNumRows()[integer] 获取返回或者影响的记录数
getError()[string] 获取最近的错误信息
quote($str, $master = true)[string] SQL指令安全过滤
listen($callback)[void] 监听SQL执行
Query类
Query类属性:只能内部及子类调用,无需关心
Query类方法
getConnection()[Connection类] 获取当前的数据库Connection对象
connect($config)[Query] 切换当前的数据库连接
getModel()[Model|null] 获取当前的模型对象实例
readMaster($allTable = false)[void] 设置后续从主库读取数据
getBuilder()[Builder类] 获取当前的builder实例对象
name($name)[Query] 指定默认的数据表名(不含前缀)
setTable($table)[Query] 指定默认数据表名(含前缀)
getTable($name = '')[string] 得到当前或者指定名称的数据表
parseSqlTable($sql)[string] 将SQL语句中的__TABLE_NAME__字符串替换成带前缀的表名(小写)
query($sql, $bind = [], $master = false, $class = false)[mixed] 执行查询 返回数据集
xecute($sql, $bind = [])[int] 执行语句
getLastInsID($sequence = null)[string] 获取最近插入的ID
getLastSql()[string][string] 获取最近一次查询的sql语句
transaction($callback)[mixed] 执行数据库事务
startTrans()[void] 启动事务
commit()[void] 用于非自动提交状态下面的查询提交
rollback()[void] 事务回滚
batchQuery($sql = [], $bind = [])[boolean] 批处理执行SQL语句 批处理的指令都认为是execute操作
getConfig($name = '')[boolean] 获取数据库的配置参数
getPartitionTableName($data, $field, $rule = [])[string] 得到分表的的数据表名
value($field, $default = null, $force = false)[mixed] 得到某个字段的值
column($field, $key = '索引')[array] 得到某个列的数组
count($field = '*')[integer|string] COUNT查询
aggregate($aggregate, $field, $force = false)[mixed] 聚合查询
sum($field)[float|int] SUM查询
min($field, $force = true)[mixed] MIN查询
max($field, $force = true)[mixed] MAX查询
avg($field)[float|int] AVG查询
setField($field, $value = '')[integer] 设置记录的某个字段值 支持使用数据库字段和方法
setInc($field, $step = 1, $lazyTime = 0)[integer|true] 字段值(延迟)增长
setDec($field, $step = 1, $lazyTime = 0)[integer|true] 字段值(延迟)减少
join($join, $condition = null, $type = 'INNER')[Query] 查询SQL组装 join
union($union, $all = false)[Query] 查询SQL组装 union
field($field, $except = false, $tableName = '', $prefix = '', $alias = '')[Query] 指定查询字段 支持字段排除和指定数据表
fieldRaw($field, array $bind = [])[Query] 表达式方式指定查询字段
data($field, $value = null)[Query] 设置数据
inc($field, $step = 1)[Querey] 字段值增长
dec($field, $step = 1)[Querey] 字段值减少
exp($field, $value)[Query] 使用表达式设置数据
raw($value)[Expression] 使用表达式设置数据
view($join, $field = true, $on = null, $type = 'INNER')[Query] 指定JOIN查询字段
//例子
\think\Db::table('sky_user a')->view('sky_user b','username,password',"a.uid=b.uid",'INNER')->select();
//等同于
\think\Db::table(['sky_user'=>"a"])->view(['sky_user'=>"b"],['username'=>"u","password"],"a.uid=b.uid",'INNER')->select();
partition($data, $field, $rule = [])[Query] 设置分表规则
where($field, $op = null, $condition = null)[Query] 指定AND查询条件
whereOr($field, $op = null, $condition = null)[Query] 指定OR查询条件
whereXor($field, $op = null, $condition = null)[Query] 指定XOR查询条件
whereRaw($where, $bind = [], $logic = 'AND')[Query] 指定表达式查询条件
whereOrRaw($where, $bind = [])[Query] 指定表达式查询条件 OR
whereNull($field, $logic = 'AND')[Query] 指定Null查询条件
whereNotNull($field, $logic = 'AND')[Query] 指定NotNull查询条件
whereIn($field, $condition, $logic = 'AND')[Query] 指定In查询条件
whereNotIn($field, $condition, $logic = 'AND')[Query] 指定NotIn查询条件
whereLike($field, $condition, $logic = 'AND')[Query] 指定Like查询条件
whereNotLike($field, $condition, $logic = 'AND')[Query] 指定NotLike查询条件
whereBetween($field, $condition, $logic = 'AND')[Query] 指定Between查询条件
whereNotBetween($field, $condition, $logic = 'AND')[Query] 指定NotBetween查询条件
whereExp($field, $condition, $logic = 'AND')[Query] 指定Exp查询条件
useSoftDelete($field, $condition = null)[Query] 设置软删除字段及条件
removeWhereField($field, $logic = 'AND')[Query] 去除某个查询条件
removeOption($option = true)[Query] 去除查询参数
limit($offset, $length = null)[Query] 指定查询数量
page($page, $listRows = null)[Query] 指定分页
$config =[
'page'=>1,//当前页
'path'=>1,//url路径
'query'=>1,//url额外参数
'fragment'=>1,//url锚点
'var_page'=>1,//分页变量
'list_rows'=>1,//每页数量
'type'=>1,//分页类名
];
paginate($listRows = null, $simple = false, $config = [])[\think\Paginator] 分页查询
table($table)[Query] 指定当前操作的数据表
using($using)[Query] SING支持 用于多表删除
order($field, $order = null)[Query] 指定排序 order('id','desc') 或者 order(['id'=>'desc','create_time'=>'desc'])
orderRaw($field, array $bind = [])[Query] 表达式方式指定Field排序
cache($key = true, $expire = null, $tag = null)[Query] 查询缓存
group($group)[Query] 指定group查询
having($having)[Query] 指定having查询
lock($lock = false)[Query] 指定查询lock(是否lock)
distinct($distinct)[Query] 指定distinct查询(是否唯一)
alias($alias)[Query] 指定数据表别名
orce($force)[Query] 指定强制索引
fetchSql($fetch = true)[Query] 获取执行的SQL语句
fetchPdo($pdo = true)[Query] 不主动获取数据集
master()[Query] 设置从主服务器读取数据
strict($strict = true)[Query] 设置是否严格检查字段名
failException($fail = true)[Query] 设置查询数据不存在是否抛出异常
sequence($sequence = null)[Query] 设置自增序列名
pk($pk)[Query] 指定数据表主键
whereTime($field, $op, $range = null)[Query] 查询日期或者时间
getTableInfo($tableName = '', $fetch = '')[mixed] 获取数据表信息
getPk($options = '')[string|array] 获取当前数据表的主键
getTableFields($table = '')[??] 获取当前数据表字段信息
getFieldsType($table = '')[??] 获取当前数据表字段类型
getFieldsBind($table = '')[??] 获取当前数据表绑定信息
bind($key, $value = false, $type = PDO::PARAM_STR)[Query] 参数绑定
isBind($key)[boolean] 检测参数是否已经绑定
options(array $options)[Query] 查询参数赋值
getOptions($name = '')[mixed] 获取当前的查询参数
with($with)[Query] 设置关联查询JOIN预查询
withCount($relation, $subQuery = true)[Query] 关联统计
withField($field)[Query] 关联预加载中 获取关联指定字段值
via($via = '')[Query] 设置当前字段添加的表别名
relation($relation)[Query] 设置关联查询
insert(array $data = [], $replace = false, $getLastInsID = false, $sequence = null)[integer|string] 插入记录
insertGetId(array $data, $replace = false, $sequence = null)[integer|string] 插入记录并获取自增ID
insertAll(array $dataSet, $replace = false, $limit = null)[integer|string] 批量插入记录
selectInsert($fields, $table)[integer|string] 通过Select方式插入记录
update(array $data = [])[integer|string] 更新记录
getPdo()[\PDOStatement|string] 执行查询但只返回PDOStatement对象
select($data = null)[Collection|false|\PDOStatement|string] 查找记录
find($data = null)[array|false|\PDOStatement|string|Model] 查找单条记录
selectOrFail($data = null)[array|\PDOStatement|string|Model] 查找多条记录 如果不存在则抛出异常
findOrFail($data = null)[array|\PDOStatement|string|Model] 查找单条记录 如果不存在则抛出异常
chunk($count, $callback, $column = null, $order = 'asc')[boolean] 分批数据返回处理
getBind()[array] 获取绑定的参数 并清空
buildSql($sub = true)[string] 创建子查询SQL
delete($data = null)[int] 删除记录
static event($event, $callback)[void] 注册回调方法
~~~
builder及其子类是负责组装sql的如:`\library\think\db\builder\Mysql.php`,每个Query最终执行方法都会用到它
如Query的inser方法里就有t` $bulk = $this->builder->insert($data, $options);`这个属于tp内部使用的平时我们用不到
- 目录结构与基础
- 修改数据后页面无变化
- 防跨目录设置
- input
- 系统目录
- 自动生成的文件以及目录
- 类自动加载
- url生成
- 数据增删改查
- 增加数据
- 数据更新
- 数据删除
- 数据查询
- 架构
- 生命周期
- 入口文件
- URL访问规则
- 配置
- 默认惯例配置配置
- 初始应用配置
- 路由
- 域名路由
- URL生成
- 数据库操作
- 方法列表
- 连接数据库
- 分布式数据库
- 查询构造器
- 查询数据
- 添加数据
- 更新数据
- 删除数据
- 查询语法
- 聚合查询(统计)
- 时间查询
- 高级查询
- 视图查询
- 子查询
- 辅助查询之链式操作
- where
- table
- alias
- field
- order
- limit
- page
- group
- having
- join
- union
- distinct
- lock
- cache
- comment
- fetchSql
- force
- bind
- partition
- strict
- failException
- sequence(pgsql专用)
- 查询事件
- 事务操作
- 监听SQL
- 存储过程
- 数据集
- 控制器
- 跳转和重定向
- 空控制器和空操作
- 分层控制器
- Rest控制器
- 资源控制器
- 自动定位控制器
- tp3的增删改查
- 方法注入
- 模型
- 属性方法一览
- 类方法详解
- Model
- 调用model不存在的属性
- 调用model中不存在的方法
- 调用model中不存在的静态方法
- hasOne
- belongsTo
- hasMany {Relation}
- belongsToMany
- hasManyThrough
- morphMany
- morphOne
- morphTo
- ::hasWhere {Query}
- ::has
- relationCount
- data 【model】
- setInc {integer|true}
- setDec {integer|true}
- save {integer | false}
- saveAll {array}
- delete {integer}
- ::get 查询单条数据 {Model}
- ::all 查询多条数据{Model [ ]}
- ::create 新增单条数据 {Model}
- ::update 更新单条数据 {Model}
- ::destroy {integer}
- ::scope {Query}
- getAttr {mixed}
- xxx
- append
- appendRelationAttr
- hidden
- visible
- except
- readonly
- auto
- together
- allowField
- isUpdate
- validate
- toCollection
- toJson
- toArray
- 定义
- 新增
- 更新
- 查询
- 删除
- 聚合
- 获取器
- 修改器
- 时间戳
- 只读字段
- 软删除
- 类型转换
- 数据完成
- 查询范围
- 模型分层
- 数组访问和转换
- JSON序列化
- 事件
- 关联
- 一对一关联
- 主表一对一关联
- 从表一对一关联(相对关联)
- 一对多关联
- 主表定义一对多关联
- 从表定义一对多关联
- 远程一对多
- 多对多关联
- 多态关联
- 动态属性
- 关联预载入with()
- 关联统计
- N+1查询
- 聚合模型
- Model方法集合
- 表单验证
- 验证器
- 验证规则
- 错误信息
- 验证场景
- 控制器验证
- 模型验证
- 内置规则
- 静态调用
- 表单令牌
- Token身份令牌
- 视图
- 模版
- 变量输出
- 函数输出
- Request请求参数
- 模板注释及原样输出
- 三元运算
- 内置标签
- 模板继承
- 模板布局
- 日志
- 日志初始化
- 日志驱动
- 日志写入
- 独立日志
- 日志清空
- 写入授权
- 自定义日志
- 错误和调试
- 异常
- php系统异常及thinkphp5异常机制
- 异常处理
- 抛出异常
- 异常封装
- resful
- 404页面
- 调试模式
- Trace调试
- SQL调试
- 变量调试
- 性能调试
- 远程调试
- 安全
- 输入安全
- 数据库安全
- 上传安全
- 其它安全建议
- xss过滤
- 扩展
- 函数
- 类库
- 行为
- 驱动
- Composer包
- Time
- 数据库迁移工具
- Workerman
- MongoDb
- htmlpurifier XSS过滤
- 新浪SAE
- oauth2.0
- 命令行及生成文件
- 系统现成命令
- 创建类库文件
- 生成类库映射文件
- 生成路由缓存
- 清除缓存文件
- 生成配置缓存文件
- 生成数据表字段缓存
- 自定义命令行
- 开始
- 调用命令
- 杂项
- 助手函数
- URL重写
- 缓存
- 缓存总结
- Session
- Cookie
- 多语言
- 分页
- 上传
- 验证码
- 图像处理
- 文件处理
- 单元测试
- 自定义表单令牌