ThinkPHP5数据库实例详解

浏览21089
更新时间2022-01-20

table方法的使用

1、功能:选择当前操作的数据表实例(完整表名)

2、源码位置:/thinkphp/library/think/db/Query.php

/**
     * 指定当前操作的数据表
     * @access public
     * @param mixed $table 表名
     * @return $this
     */
    public function table($table)
    {
        if (is_string($table)) {
            if (strpos($table, ',')) {
                $tables = explode(',', $table);
                $table  = [];
                foreach ($tables as $item) {
                    list($item, $alias) = explode(' ', trim($item));
                    if ($alias) {
                        $this->alias([$item => $alias]);
                        $table[$item] = $alias;
                    } else {
                        $table[] = $item;
                    }
                }
            } elseif (strpos($table, ' ')) {
                list($table, $alias) = explode(' ', $table);
                $table               = [$table => $alias];
                $this->alias($table);
            }
        } else {
            $tables = $table;
            $table  = [];
            foreach ($tables as $key => $val) {
                if (is_numeric($key)) {
                    $table[] = $val;
                } else {
                    $this->alias([$key => $val]);
                    $table[$key] = $val;
                }
            }
        }
        $this->options['table'] = $table;
        return $this;
    }

3、参数与返回值:

  • 阅读源码发现:
    • 参数只有一个:数据表名称 ,而且必须是完整的、包括表前缀;
    • 参数可以指定数据库名称,实再跨库选择数据表;
    • 返回的是查询类Query的对象自身,便于后面链式调用。

4、适用环境:

  • 需要完整的数据表名称(如某张表前缀与系统配置不一致或没有设置前缀);
  • 需要跨越数据库,选择其它库中的数据表操作时;
  • 需要给当前数据表设定别名访问,以避免与关键字冲突,特别是多表查询时;

重要提示:setTable方法功能与table非常类似,但还是有区别的:
 1、table方法指定当前正在操作的数据表;
 2、setTable方法设置当前脚本默认的数据表;
 3、即当前脚本中,如果用setTable设置了默认数据表,那么后面语句就不用再次调用table了。

//设置了默认数据表为:setTable( 'tp5_staff'  ),后面的操作都针对该表
dump( Db::setTable( 'tp5_staff' ) -> where( 'id = 1020' ) -> find( ) ) ;

//查询 id= 1025的记录,不用再设置数据表了
dump( Db:: where( 'id = 1020' ) -> find( ) ) ;

为了代码清晰,健壮易扩展,不建议用setTable来牺牲灵活性

5、调用语法(以:tp5_staff表为例):

  • 通过 Db.php类中的:static _callStatic() 自动实现静态方法调用(了解即可)
  • 数据库类静态调用:
    • 完整数据表名称:Db::table('tp5_staff');
    • 带数据库名称的完整数据表:Db::table('tp5.tp5_staff');
    • 给数据表设置别名调用:Db::table(['tp_staff'=>'staff']);

6、实例:

dump( )方法介绍:

1.dump( )方法是框架提供给开发者的一个非常好用的调式工具,可以对运行结果中的数据进行人性化的展示,可以认为是PHP原生var_dump( )函数加强版,或者格式化的var_dump( );
 2.dump( ) 方法,定义在:/thinkphp/library/think/Debug.php 类中,该类随框架启动,所以你可以直接使用dump( )
 3.如果你这样使用:Debug::dump( ) 也可以,但必须在脚本前面引入Debug.php类文件 ,即:use think\Debug;

  1. (完整表名)选择tp5_staff表,查询id等于1003的数据
  • 为节省篇幅,只列出方法中关键语句,相信你完全可以自己补全:
dump(Db::table('tp5_staff')->find('1003'));
  1. (带数据库的完整表名)选择tp5_staff表,查询id等于1003的数据
dump(Db::table('tp5.tp5_staff')->find('1003'));
  1. (设置表别名)选择tp5_staff表,查询id等于1003的数据
dump(Db::table(['tp5.tp5_staff'=>'staff'])->find('1003'));
  • 运行结果:
array(7) {
  ["id"] => int(1003)
  ["name"] => string(6) "杨过"
  ["sex"] => int(0)
  ["age"] => int(35)
  ["salary"] => float(5303)
  ["dept"] => string(9) "市场部"
  ["hiredate"] => string(10) "2014-09-22"
}
  • 参数说明
    • 将参数放在一个数组中,每个数据元素,对应一个数据表;
    • 原始完整表名做为数据元素键名,别名做为数据元素的值;
    • 多表联合查询时,设置表别名非常重要,特别是表自身递归查询时。

7、局限性或注意事项:

  • table()方法,对数据表名要求比较严格,不够简洁;
  • 如果在数据库连接配置中设置了表前缀,完全可以用后面要学的name()替代;
  • 日常开发中,完全可以用模型调用方式,避免用这种方式。

小作业:

  • 课后,把本课的实例全部上机操作一遍,以加深理解。

相关视频

更多

免费

php8,我来也
初级php8,我来也

34万次学习

收藏

免费

Thinkphp6.0正式版视频教程
中级Thinkphp6.0正式版视频教程

39.6万次学习

收藏

免费

细说PHP第一季
中级细说PHP第一季

31万次学习

收藏

精品课程

更多
前端入门_HTML5
前端入门_HTML5

共29课时

65万人学习

CSS视频教程-玉女心经版
CSS视频教程-玉女心经版

共25课时

41.3万人学习

JavaScript极速入门_玉女心经系列
JavaScript极速入门_玉女心经系列

共43课时

76.7万人学习

独孤九贱(1)_HTML5视频教程
独孤九贱(1)_HTML5视频教程

共25课时

64.1万人学习

独孤九贱(2)_CSS视频教程
独孤九贱(2)_CSS视频教程

共22课时

24.4万人学习

独孤九贱(3)_JavaScript视频教程
独孤九贱(3)_JavaScript视频教程

共28课时

36.2万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时

133.2万人学习

热门下载

更多
phpStudy 2018最新版
phpStudy 2018最新版

集成PHP7,16种组合,超全大合集

下载

VC9 32位
VC9 32位

VC9 32位 phpstudy集成安装环境运行库

下载

VC11 32位
VC11 32位

VC11 32位 phpstudy集成安装环境运行库​

下载

php程序员工具箱完整版
php程序员工具箱完整版

程序员工具箱 v1.0 php集成环境

下载

VC14 32位
VC14 32位

VC14 32位 phpstudy安装环境运行库

下载

SublimeText3汉化版
SublimeText3汉化版

中文版,非常好用

下载

Notepad++ Windows版
Notepad++ Windows版

Notepad++ 8.9.7 Windows版官方安装包,适合 Windows 用户进行代码编辑、文本处理、语法高亮和插件扩展配置。

下载