[TOC]
## 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、适用环境:
* 需要完整的数据表名称(如某张表前缀与系统配置不一致或没有设置前缀);
* 需要跨越数据库,选择其它库中的数据表操作时;
* 需要给当前数据表设定别名访问,以避免与关键字冲突,特别是多表查询时;
>[danger] 重要提示: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( ) ) ;
~~~
>[warning] 为了代码清晰,健壮易扩展,不建议用setTable来牺牲灵活性
#### 5、调用语法(以:tp5_staff表为例):
* <span style="color:#999;">通过 Db.php类中的:static _callStatic() 自动实现静态方法调用(了解即可)</span>
* 数据库类静态调用:
* 完整数据表名称:Db::table('tp5_staff');
* 带数据库名称的完整数据表:Db::table('tp5.tp5_staff');
* 给数据表设置别名调用:Db::table(['tp_staff'=>'staff']);
#### 6、实例:
**dump( )方法介绍:**
>[success] 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'));
~~~
2. (带数据库的完整表名)选择tp5_staff表,查询id等于1003的数据
~~~
dump(Db::table('tp5.tp5_staff')->find('1003'));
~~~
3. (设置表别名)选择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()替代;
* 日常开发中,完全可以用模型调用方式,避免用这种方式。
#### 小作业:
* 课后,把本课的实例全部上机操作一遍,以加深理解。
- 前言[随时更新]
- ThinkPHP 5数据库重构
- 开发环境
- 1.ThinkPHP5开发环境(Mac版)
- 2.ThinkPHP5开发环境(Win版)
- MySQL快速复习
- 1.数据库操作
- 2.数据表操作
- 1.创建数据表 (重点)
- 2.添加数据表记录
- 3.查询数据表(重点)
- 4.更新数据表
- 5.编辑数据表结构(重点)
- 6_复制数据表
- 7.删除数据和表
- 连接数据库
- 1.数据库配置文件database.php
- 2.Db类静态方法connect()
- 3.模块中的配置文件config.php
- MySQL原生查询
- 1.读操作query
- 2.写操作execute
- 选择数据表
- 1.table与setTable方法
- 2.name方法
- 3.db助手函数
- 4.alias方法
- 结果集查询
- 1.find方法
- 2.select方法
- 3.fetchSql方法
- 4.value方法
- 5.column方法
- 6.field方法
- 新增数据
- 1.insert_单条添加
- 2.insertAll_批量添加
- 3_db_助手函数添加
- 更新数据
- 1.update方法
- 2.setField更新字段
- 3_自增自减与延时更新
- 删除数据
- 1.delete方法
- 查询方法
- 1.getTableInfo方法
- 2.where方法
- 3.whereOr方法
- 4.混合查询(闭包实现)
- 表达式查询
- 1.表达式查询(重点)
- 2.exp通用查询
- 分组查询
- 1.group方法
- 2.having方法
- 排序分页查询
- 1.order方法
- 2.limit方法
- 3.page方法
- 聚合查询
- 时间查询
- 1.where方法
- 2.whereTime方法
- 高级查询
- 1.快捷查询
- 2.区间查询
- 3.批量查询
- 4.Query对象查询
- 5.混合查询
- 视图查询
- view方法
- 子查询
- 1.select方法
- 2.fetchSql方法
- 3.buildSql方法
- 4.闭包子查询
- 总结/参考
- 1.方法参数类型总结
- 2.查询/子查询/连接查询