讲师中心 微信公众号
AI工具推荐 视频效率加速

ThinkPHP5数据库实例详解

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

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 控制器代码:
<?php 
namespace app\index\controller;
use think\Db;

class Index {
    public function index(){

    //获取当前数据表的信息
    dump( Db::getTableInfo('tp5_staff'));
    }
}
  • 运行结果如下:
//返回结果是一个二维关联数组
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"
}

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

<?php 
namespace app\index\controller;
use think\Db;

class Index {
    public function index(){

    //设置默认数据表为:tp5_staff
    Db::setTable('tp5_staff');

    //获取当前数据表的信息
    dump( Db::getTableInfo();
    }
}

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


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

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

<?php 
namespace app\index\controller;
use think\Db;
class Index {
    public function index(){

    //获取当前数据表的字段名称信息
    dump( Db::getTableInfo('tp5_staff','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 源码:

<?php 
namespace app\index\controller;
use think\Db;
class Index {

    public function index(){

    //获取当前数据表的字段名称信息
    dump( Db::getTableFields(['table'=>'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
<?php 
namespace app\index\controller;
use think\Db;
class Index {
    public function index(){

    //获取当前数据表的字段信息
    dump( Db::getTableInfo('tp5_staff','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"
}

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

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

5、总结:

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

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

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

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn