ThinkPHP5数据库实例详解 /getTableInfo方法

getTableInfo方法

getTableInfo 方法

1:功能:获取数据表信息

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

3:参数与返回值

  • 方法原型:
/** * 获取数据表信息 * @access public * @param mixed $tableName 数据表名 留空自动获取 * @param string $fetch 获取信息类型 包括 fields type bind pk * @return mixed */ public function getTableInfo($tableName = '', $fetch = '') { //方法源码... }
  • 参数
序号 参数 说明
1 数据表名 允许为空,如设置必须输入带前缀的完整表名称,如:tp5_staff
2 信息类型 数据表的描述信息,如字段名、字段类型、主键等,即返回数组的键名

  • 返回类型:

    返回一个二维数组:

    1. 键名是描述表的信息类型:fields(字段名),type(类型),bind(绑定参数),pk(主键)
    2. 每个元素值是一个由字段信息组成的一维数据,后面有实例,会再直观

4、实例演示:

任务1:获取tp5_staff表的全部信息:

  • Index.php 控制器代码:
  • 运行结果如下:
//返回结果是一个二维关联数组 array(4) { //每个数组元素的键名,就是信息类型,可做为getTableInfo方法第二参数 //fields 获取字段名称 ["fields"] => array(7) { [0] => string(2) "id" [1] => string(4) "name" [2] => string(3) "sex" [3] => string(3) "age" [4] => string(6) "salary" [5] => string(4) "dept" [6] => string(8) "hiredate" } //type 获取字段类型 ["type"] => array(7) { ["id"] => string(15) "int(4) unsigned" ["name"] => string(11) "varchar(30)" ["sex"] => string(19) "tinyint(2) unsigned" ["age"] => string(19) "tinyint(3) unsigned" ["salary"] => string(19) "float(8,2) unsigned" ["dept"] => string(19) "tinyint(2) unsigned" ["hiredate"] => string(4) "date" } //获取数据表默认绑定信息 ["bind"] => array(7) { ["id"] => int(1) ["name"] => int(2) ["sex"] => int(1) ["age"] => int(1) ["salary"] => int(1) ["dept"] => int(1) ["hiredate"] => int(2) } //获取表的主键 ["pk"] => string(2) "id" }

根据该方法的参数描述,我们知道,如果事先设定了默认数据表,第一个参数可省略,我们再次修改一下上面源码:

其运行结果与第一种方式完全一样,不再赘述。第二种方法,我们复习了之前的知识,提供了另外一种实现方式罢了,实际工作工,还是采用第一种方式更简洁:直接将完整表名写在参数中。


任务2:获取tp5_staff表的字段名称信息:

只需传入第二参数:fields,即上面二维数组结果中fields元素的键名

  • 运行结果:
array(7) { [0] => string(2) "id" [1] => string(4) "name" [2] => string(3) "sex" [3] => string(3) "age" [4] => string(6) "salary" [5] => string(4) "dept" [6] => string(8) "hiredate" }

框架还提供了一个更为简洁的方法:getTableFields方法,完成同样的功能,请注意参数类型,下面是修改后的Index.php 源码:

'tp5_staff'])); } }

该方法,官方手册中没有提及。
该方法的参数必须是数组类型,作用是给Query类查询参数数组$option['table']属性赋值:['table'=>'tp5_staff']

  • 我们看一下:getTableFields方法的源码:Query.php (1436 ~ 1400)
// 获取当前数据表字段信息 public function getTableFields($options) { return $this->getTableInfo($options['table'], 'fields'); }

可以看到内部仍然是用:getTableInfo方法来实现的,所以该方法本身只是getTableInfo($options['table'], 'fields') 的快捷方式罢了


任务3:获取tp5_staff表的字段类型信息:

  • 再次修改Index.php
  • 运行结果:
array(7) { ["id"] => string(15) "int(4) unsigned" ["name"] => string(11) "varchar(30)" ["sex"] => string(19) "tinyint(2) unsigned" ["age"] => string(19) "tinyint(3) unsigned" ["salary"] => string(19) "float(8,2) unsigned" ["dept"] => string(19) "tinyint(2) unsigned" ["hiredate"] => string(4) "date" }

获取字段名称有快捷方式,那么获取字段类型有什么呢?答案是肯定的:getFieldsType方法,为节省篇幅,仅给给代码变化部分:

//获取当前数据表的字段信息 dump( Db::getFieldsType( [ 'table'=>'tp5_staff' ] ) );

5、总结:

该方法比较简单,重点在于理解参数的含义,还有几个信息类型的获取留给读者完成:

  1. getTableInfo('tp5_staff','bind') :获取数据表绑定信息;
  2. getTableInfo('tp_staff','pk') :获取数据表的主键信息;
  3. 还有他们对应的快捷方式:getFieldsBind方法 ,getPk等

课后请独立上机练习一下,为后面课程打下基础