[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.查詢/子查詢/連接查詢