ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
**\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内部使用的平时我们用不到