?
This document uses PHP Chinese website manual Release
Database Forge類(lèi)包含幫助您管理數(shù)據(jù)庫(kù)的方法。
目錄
數(shù)據(jù)庫(kù)偽造類(lèi)
添加字段
添加鍵
創(chuàng)建一個(gè)表格
丟下一張桌子
重命名表
初始化Forge類(lèi)
創(chuàng)建和刪除數(shù)據(jù)庫(kù)
創(chuàng)建和刪除表格
- [修改表格](about:blank#修改表格) - [向列添加列](about:blank#將列添加到表中) - [從表中刪除列](about:blank#從表中刪除列) - [修改表格中的列](about:blank#modify-a-column-in-a-table)
- [類(lèi)參考](about:blank#class-reference)
重要
為了初始化Forge類(lèi),您的數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序必須已經(jīng)運(yùn)行,因?yàn)閒orge類(lèi)依賴(lài)它。
按如下所示加載Forge類(lèi):
$this->load->dbforge()
您還可以將另一個(gè)數(shù)據(jù)庫(kù)對(duì)象傳遞給DB Forge加載程序,以防您要管理的數(shù)據(jù)庫(kù)不是默認(rèn)數(shù)據(jù)庫(kù):
$this->myforge = $this->load->dbforge($this->other_db, TRUE);
在上面的例子中,我們傳遞一個(gè)自定義的數(shù)據(jù)庫(kù)對(duì)象作為第一個(gè)參數(shù),然后告訴它返回dbforge對(duì)象,而不是直接指定給它$this->dbforge
。
注意
這兩個(gè)參數(shù)都可以單獨(dú)使用,只要傳遞一個(gè)空值作為第一個(gè)參數(shù)就可以跳過(guò)它。
初始化后,您將使用該$this->dbforge
對(duì)象訪問(wèn)方法:
$this->dbforge->some_method();
$this->dbforge->create_database(‘db_name’)
允許您創(chuàng)建在第一個(gè)參數(shù)中指定的數(shù)據(jù)庫(kù)。根據(jù)成功或失敗返回TRUE / FALSE:
if ($this->dbforge->create_database('my_db')){ echo 'Database created!';}
$this->dbforge->drop_database(‘db_name’)
允許您刪除第一個(gè)參數(shù)中指定的數(shù)據(jù)庫(kù)。根據(jù)成功或失敗返回TRUE / FALSE:
if ($this->dbforge->drop_database('my_db')){ echo 'Database deleted!';}
創(chuàng)建表格時(shí),您可能希望做幾件事情。添加字段,將關(guān)鍵字添加到表中,更改列。CodeIgniter為此提供了一種機(jī)制。
字段通過(guò)關(guān)聯(lián)數(shù)組創(chuàng)建。在數(shù)組中,您必須包含與該字段的數(shù)據(jù)類(lèi)型相關(guān)的“類(lèi)型”鍵。例如,INT,VARCHAR,TEXT等。許多數(shù)據(jù)類(lèi)型(例如VARCHAR)也需要一個(gè)'約束'鍵。
$fields = array( 'users' => array( 'type' => 'VARCHAR', 'constraint' => '100', ), );// will translate to "users VARCHAR(100)" when the field is added.
另外,可以使用以下鍵/值:
unsigned / true:在字段定義中生成“UNSIGNED”。
默認(rèn)值/值:在字段定義中生成默認(rèn)值。
null / true:在字段定義中生成“NULL”。沒(méi)有這個(gè),該字段將默認(rèn)為“NOT NULL”。
auto_increment / true:在該字段上生成一個(gè)auto_increment標(biāo)志。請(qǐng)注意,字段類(lèi)型必須是支持此類(lèi)型的類(lèi)型,例如整數(shù)。
唯一/真實(shí):為字段定義生成唯一鍵。
$fields = array( 'blog_id' => array( 'type' => 'INT', 'constraint' => 5, 'unsigned' => TRUE, 'auto_increment' => TRUE ), 'blog_title' => array( 'type' => 'VARCHAR', 'constraint' => '100', 'unique' => TRUE, ), 'blog_author' => array( 'type' =>'VARCHAR', 'constraint' => '100', 'default' => 'King of Town', ), 'blog_description' => array( 'type' => 'TEXT', 'null' => TRUE, ), );
在字段被定義之后,可以使用它們添加,$this->dbforge->add_field($fields);
然后調(diào)用該create_table()
方法。
$this->dbforge->add_field()
添加字段方法將接受上述數(shù)組。
如果您確切知道如何創(chuàng)建字段,則可以使用add_field()將字符串傳遞到字段定義中
$this->dbforge->add_field("label varchar(100) NOT NULL DEFAULT 'default label'");
注意
將原始字符串作為字段傳遞后,不能add_key()
在這些字段上進(jìn)行調(diào)用。
注意
多次調(diào)用add_field()是累積的。
創(chuàng)建ID字段有一個(gè)特殊的例外。類(lèi)型為id的字段將被自動(dòng)分配為INT(9)auto_incrementing主鍵。
$this->dbforge->add_field('id');// gives id INT(9) NOT NULL AUTO_INCREMENT
一般來(lái)說(shuō),你會(huì)希望你的桌子有鑰匙。這是通過(guò)$ this-> dbforge-> add_key('field')完成的。將可選的第二個(gè)參數(shù)設(shè)置為T(mén)RUE將使其成為主鍵。請(qǐng)注意,add_key()后面必須跟調(diào)用create_table()。
多列非主鍵必須作為數(shù)組發(fā)送。下面的示例輸出是針對(duì)MySQL的。
$this->dbforge->add_key('blog_id', TRUE);// gives PRIMARY KEY `blog_id` (`blog_id`) $this->dbforge->add_key('blog_id', TRUE); $this->dbforge->add_key('site_id', TRUE);// gives PRIMARY KEY `blog_id_site_id` (`blog_id`, `site_id`) $this->dbforge->add_key('blog_name');// gives KEY `blog_name` (`blog_name`) $this->dbforge->add_key(array('blog_name', 'blog_label'));// gives KEY `blog_name_blog_label` (`blog_name`, `blog_label`)
在聲明了字段和鍵后,可以使用創(chuàng)建一個(gè)新表
$this->dbforge->create_table('table_name');// gives CREATE TABLE table_name
將可選的第二個(gè)參數(shù)設(shè)置為T(mén)RUE會(huì)將“IF NOT EXISTS”子句添加到定義中
$this->dbforge->create_table('table_name', TRUE);// gives CREATE TABLE IF NOT EXISTS table_name
你也可以傳遞可選的表屬性,比如MySQL的ENGINE
:
$attributes = array('ENGINE' => 'InnoDB'); $this->dbforge->create_table('table_name', FALSE, $attributes);// produces: CREATE TABLE `table_name` (...) ENGINE = InnoDB DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
注意
除非您指定CHARACTER SET
和/或COLLATE
屬性,create_table()
否則將始終使用您配置的char_set和dbcollat值添加它們,只要它們不為空(僅限MySQL)。
執(zhí)行DROP TABLE語(yǔ)句并可選擇添加IF EXISTS子句。
// Produces: DROP TABLE table_name$this->dbforge->drop_table('table_name');// Produces: DROP TABLE IF EXISTS table_name $this->dbforge->drop_table('table_name',TRUE);
執(zhí)行TABLE重命名
$this->dbforge->rename_table('old_table_name', 'new_table_name');// gives ALTER TABLE old_table_name RENAME TO new_table_name
$this->dbforge->add_column()
該add_column()
方法用于修改現(xiàn)有的表。它接受與上面相同的字段數(shù)組,并且可以用于無(wú)限數(shù)量的附加字段。
$fields = array( 'preferences' => array('type' => 'TEXT')); $this->dbforge->add_column('table_name', $fields);// Executes: ALTER TABLE table_name ADD preferences TEXT
如果您使用的是MySQL或CUBIRD,那么您可以利用它們的AFTER和FIRST子句來(lái)定位新列。
例子:
// Will place the new column after the `another_field` column: $fields = array( 'preferences' => array('type' => 'TEXT', 'after' => 'another_field'));// Will place the new column at the start of the table definition:$fields = array( 'preferences' => array('type' => 'TEXT', 'first' => TRUE));
$this->dbforge->drop_column()
用于從表格中刪除一列。
$this->dbforge->drop_column('table_name', 'column_to_drop');
$this->dbforge->modify_column()
這種方法的用法add_column()
與之相同,只是它改變了現(xiàn)有的列而不是添加新的列。為了更改名稱(chēng),您可以在定義數(shù)組的字段中添加一個(gè)“名稱(chēng)”鍵。
$fields = array( 'old_name' => array( 'name' => 'new_name', 'type' => 'TEXT', ), ); $this->dbforge->modify_column('table_name', $fields);// gives ALTER TABLE table_name CHANGE old_name new_name TEXT
class CI_DB_forgeadd_column($table[, $field = array()[, $_after = NULL]])
參數(shù): | $ table(string) - 將列添加到$ field(array)的列名 - 列定義$ _after(string) - AFTER子句的列(不建議使用) |
---|---|
返回: | 成功為T(mén)RUE,失敗為FALSE |
返回類(lèi)型: | 布爾 |
$ table(string) - 要添加列的表名
$ field(array) - 列定義(s)
$ _after(字符串) - AFTER子句的列(不建議使用)
返回:成功時(shí)為T(mén)RUE,失敗時(shí)為FALSE
返回類(lèi)型:布爾值
向表中添加一列。用法:請(qǐng)參閱[將列添加到表](about:blank#將列添加到表)。
add_field($field)
參數(shù): | $ field(array) - 要添加的字段定義 |
---|---|
返回: | CI_DB_forge實(shí)例(方法鏈接) |
返回類(lèi)型: | CI_DB_forge |
$ field(array) - 要添加的字段定義
返回:CI \ _DB \ _forge實(shí)例(方法鏈接)
返回類(lèi)型:CI \ _DB \ _forge
向?qū)⒂糜趧?chuàng)建表的集添加一個(gè)字段。用法:請(qǐng)參閱[添加字段](關(guān)于:空白#添加字段)。
add_key($key[, $primary = FALSE])
參數(shù): | $ key(array) - 鍵字段的名稱(chēng)$ primary(bool) - 如果它應(yīng)該是主鍵或常規(guī)鍵,則設(shè)置為T(mén)RUE |
---|---|
返回: | CI_DB_forge實(shí)例(方法鏈接) |
返回類(lèi)型: | CI_DB_forge |
$ key(數(shù)組) - 一個(gè)關(guān)鍵字段的名稱(chēng)
$ primary(bool) - 如果它應(yīng)該是主鍵或常規(guī)鍵,則設(shè)置為T(mén)RUE
返回:CI \ _DB \ _forge實(shí)例(方法鏈接)
返回類(lèi)型:CI \ _DB \ _forge
向?qū)⒂糜趧?chuàng)建表的集添加一個(gè)密鑰。用法:請(qǐng)參閱[添加密鑰](關(guān)于:空白#添加密鑰)。
create_database($db_name)
參數(shù): | $ db_name(string) - 要?jiǎng)?chuàng)建的數(shù)據(jù)庫(kù)的名稱(chēng) |
---|---|
返回: | 成功為T(mén)RUE,失敗為FALSE |
返回類(lèi)型: | 布爾 |
$ db_name(string) - 要?jiǎng)?chuàng)建的數(shù)據(jù)庫(kù)的名稱(chēng)
返回:成功時(shí)為T(mén)RUE,失敗時(shí)為FALSE
返回類(lèi)型:布爾值
創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)。用法:請(qǐng)參閱[創(chuàng)建和刪除數(shù)據(jù)庫(kù)](關(guān)于:空白#創(chuàng)建和刪除數(shù)據(jù)庫(kù))。
create_table($table[, $if_not_exists = FALSE[, array $attributes = array()]])
參數(shù): | $ table(string) - 要?jiǎng)?chuàng)建的表的名稱(chēng)$ if_not_exists(string) - 設(shè)置為T(mén)RUE以添加'IF NOT EXISTS'子句$ attributes(string) - 表屬性的關(guān)聯(lián)數(shù)組 |
---|---|
返回: | 成功為T(mén)RUE,失敗為FALSE |
返回類(lèi)型: | 布爾 |
$ table(string) - 要?jiǎng)?chuàng)建的表的名稱(chēng)
$ if_not_exists(string) - 設(shè)置為T(mén)RUE以添加'IF NOT EXISTS'子句
$ attributes(string) - 表格屬性的關(guān)聯(lián)數(shù)組
返回:成功時(shí)為T(mén)RUE,失敗時(shí)為FALSE
返回類(lèi)型:布爾值
創(chuàng)建一個(gè)新表。用法:請(qǐng)參閱[創(chuàng)建表格](關(guān)于:空白#創(chuàng)建表格)。
drop_column($table, $column_name)
參數(shù): | $ table(string) - 表名$ column_name(array) - 要?jiǎng)h除的列名 |
---|---|
返回: | 成功為T(mén)RUE,失敗為FALSE |
返回類(lèi)型: | 布爾 |
$ table(string) - 表名
$ column_name(array) - 要?jiǎng)h除的列名稱(chēng)
返回:成功時(shí)為T(mén)RUE,失敗時(shí)為FALSE
返回類(lèi)型:布爾值
從表中刪除一列。用法:請(qǐng)參見(jiàn)[從表中刪除列](about:blank#從表中刪除列)。
drop_database($db_name)
參數(shù): | $ db_name(字符串) - 要?jiǎng)h除的數(shù)據(jù)庫(kù)的名稱(chēng) |
---|---|
返回: | 成功為T(mén)RUE,失敗為FALSE |
返回類(lèi)型: | 布爾 |
$ db_name(字符串) - 要?jiǎng)h除的數(shù)據(jù)庫(kù)的名稱(chēng)
返回:成功時(shí)為T(mén)RUE,失敗時(shí)為FALSE
返回類(lèi)型:布爾值
丟棄數(shù)據(jù)庫(kù)。用法:請(qǐng)參閱[創(chuàng)建和刪除數(shù)據(jù)庫(kù)](關(guān)于:空白#創(chuàng)建和刪除數(shù)據(jù)庫(kù))。
drop_table($table_name[, $if_exists = FALSE])
參數(shù): | $ table(string) - 要?jiǎng)h除的表的名稱(chēng)$ if_exists(string) - 設(shè)置為T(mén)RUE以添加'IF EXISTS'子句 |
---|---|
返回: | 成功為T(mén)RUE,失敗為FALSE |
返回類(lèi)型: | 布爾 |
$ table(string) - 要?jiǎng)h除的表的名稱(chēng)
$ if_exists(string) - 設(shè)置為T(mén)RUE以添加'IF EXISTS'子句
返回:成功時(shí)為T(mén)RUE,失敗時(shí)為FALSE
返回類(lèi)型:布爾值
丟下一張桌子。用法:請(qǐng)參閱[刪除表](關(guān)于:空白#刪除表)。
modify_column($table, $field)
參數(shù): | $ table(string) - 表名$ field(array) - 列定義(s) |
---|---|
返回: | 成功為T(mén)RUE,失敗為FALSE |
返回類(lèi)型: | 布爾 |
$ table(string) - 表名
$ field(array) - 列定義(s)
返回:成功時(shí)為T(mén)RUE,失敗時(shí)為FALSE
返回類(lèi)型:布爾值
修改表格列。用法:請(qǐng)參見(jiàn)[修改表格中的列](about:blank#modify-a-column-in-a-table)。
rename_table($table_name, $new_table_name)
參數(shù): | $ table(string) - 表中的當(dāng)前值$ new_table_name(string) - 表的新名稱(chēng) |
---|---|
返回: | 成功為T(mén)RUE,失敗為FALSE |
返回類(lèi)型: | 布爾 |
$ table(string) - 表中的當(dāng)前值
$ new_table_name(字符串) - 表的新名稱(chēng)
返回:成功時(shí)為T(mén)RUE,失敗時(shí)為FALSE
返回類(lèi)型:布爾值
重命名表格。用法:請(qǐng)參閱[重命名表](about:blank#renaming-a-table)。