©
本文档使用
php.cn手册 发布
Database Forge类包含帮助您管理数据库的方法。
目录
数据库伪造类
添加字段
添加键
创建一个表格
丢下一张桌子
重命名表
初始化Forge类
创建和删除数据库
创建和删除表格
- [修改表格](about:blank#修改表格) - [向列添加列](about:blank#将列添加到表中) - [从表中删除列](about:blank#从表中删除列) - [修改表格中的列](about:blank#modify-a-column-in-a-table)
- [类参考](about:blank#class-reference)
重要
为了初始化Forge类,您的数据库驱动程序必须已经运行,因为forge类依赖它。
按如下所示加载Forge类:
$this->load->dbforge()
您还可以将另一个数据库对象传递给DB Forge加载程序,以防您要管理的数据库不是默认数据库:
$this->myforge = $this->load->dbforge($this->other_db, TRUE);
在上面的例子中,我们传递一个自定义的数据库对象作为第一个参数,然后告诉它返回dbforge对象,而不是直接指定给它$this->dbforge
。
注意
这两个参数都可以单独使用,只要传递一个空值作为第一个参数就可以跳过它。
初始化后,您将使用该$this->dbforge
对象访问方法:
$this->dbforge->some_method();
$this->dbforge->create_database(‘db_name’)
允许您创建在第一个参数中指定的数据库。根据成功或失败返回TRUE / FALSE:
if ($this->dbforge->create_database('my_db')){ echo 'Database created!';}
$this->dbforge->drop_database(‘db_name’)
允许您删除第一个参数中指定的数据库。根据成功或失败返回TRUE / FALSE:
if ($this->dbforge->drop_database('my_db')){ echo 'Database deleted!';}
创建表格时,您可能希望做几件事情。添加字段,将关键字添加到表中,更改列。CodeIgniter为此提供了一种机制。
字段通过关联数组创建。在数组中,您必须包含与该字段的数据类型相关的“类型”键。例如,INT,VARCHAR,TEXT等。许多数据类型(例如VARCHAR)也需要一个'约束'键。
$fields = array( 'users' => array( 'type' => 'VARCHAR', 'constraint' => '100', ), );// will translate to "users VARCHAR(100)" when the field is added.
另外,可以使用以下键/值:
unsigned / true:在字段定义中生成“UNSIGNED”。
默认值/值:在字段定义中生成默认值。
null / true:在字段定义中生成“NULL”。没有这个,该字段将默认为“NOT NULL”。
auto_increment / true:在该字段上生成一个auto_increment标志。请注意,字段类型必须是支持此类型的类型,例如整数。
唯一/真实:为字段定义生成唯一键。
$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);
然后调用该create_table()
方法。
$this->dbforge->add_field()
添加字段方法将接受上述数组。
如果您确切知道如何创建字段,则可以使用add_field()将字符串传递到字段定义中
$this->dbforge->add_field("label varchar(100) NOT NULL DEFAULT 'default label'");
注意
将原始字符串作为字段传递后,不能add_key()
在这些字段上进行调用。
注意
多次调用add_field()是累积的。
创建ID字段有一个特殊的例外。类型为id的字段将被自动分配为INT(9)auto_incrementing主键。
$this->dbforge->add_field('id');// gives id INT(9) NOT NULL AUTO_INCREMENT
一般来说,你会希望你的桌子有钥匙。这是通过$ this-> dbforge-> add_key('field')完成的。将可选的第二个参数设置为TRUE将使其成为主键。请注意,add_key()后面必须跟调用create_table()。
多列非主键必须作为数组发送。下面的示例输出是针对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`)
在声明了字段和键后,可以使用创建一个新表
$this->dbforge->create_table('table_name');// gives CREATE TABLE table_name
将可选的第二个参数设置为TRUE会将“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)。
执行DROP TABLE语句并可选择添加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);
执行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()
方法用于修改现有的表。它接受与上面相同的字段数组,并且可以用于无限数量的附加字段。
$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子句来定位新列。
例子:
// 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()
与之相同,只是它改变了现有的列而不是添加新的列。为了更改名称,您可以在定义数组的字段中添加一个“名称”键。
$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]])
参数: | $ table(string) - 将列添加到$ field(array)的列名 - 列定义$ _after(string) - AFTER子句的列(不建议使用) |
---|---|
返回: | 成功为TRUE,失败为FALSE |
返回类型: | 布尔 |
$ table(string) - 要添加列的表名
$ field(array) - 列定义(s)
$ _after(字符串) - AFTER子句的列(不建议使用)
返回:成功时为TRUE,失败时为FALSE
返回类型:布尔值
向表中添加一列。用法:请参阅[将列添加到表](about:blank#将列添加到表)。
add_field($field)
参数: | $ field(array) - 要添加的字段定义 |
---|---|
返回: | CI_DB_forge实例(方法链接) |
返回类型: | CI_DB_forge |
$ field(array) - 要添加的字段定义
返回:CI \ _DB \ _forge实例(方法链接)
返回类型:CI \ _DB \ _forge
向将用于创建表的集添加一个字段。用法:请参阅[添加字段](关于:空白#添加字段)。
add_key($key[, $primary = FALSE])
参数: | $ key(array) - 键字段的名称$ primary(bool) - 如果它应该是主键或常规键,则设置为TRUE |
---|---|
返回: | CI_DB_forge实例(方法链接) |
返回类型: | CI_DB_forge |
$ key(数组) - 一个关键字段的名称
$ primary(bool) - 如果它应该是主键或常规键,则设置为TRUE
返回:CI \ _DB \ _forge实例(方法链接)
返回类型:CI \ _DB \ _forge
向将用于创建表的集添加一个密钥。用法:请参阅[添加密钥](关于:空白#添加密钥)。
create_database($db_name)
参数: | $ db_name(string) - 要创建的数据库的名称 |
---|---|
返回: | 成功为TRUE,失败为FALSE |
返回类型: | 布尔 |
$ db_name(string) - 要创建的数据库的名称
返回:成功时为TRUE,失败时为FALSE
返回类型:布尔值
创建一个新的数据库。用法:请参阅[创建和删除数据库](关于:空白#创建和删除数据库)。
create_table($table[, $if_not_exists = FALSE[, array $attributes = array()]])
参数: | $ table(string) - 要创建的表的名称$ if_not_exists(string) - 设置为TRUE以添加'IF NOT EXISTS'子句$ attributes(string) - 表属性的关联数组 |
---|---|
返回: | 成功为TRUE,失败为FALSE |
返回类型: | 布尔 |
$ table(string) - 要创建的表的名称
$ if_not_exists(string) - 设置为TRUE以添加'IF NOT EXISTS'子句
$ attributes(string) - 表格属性的关联数组
返回:成功时为TRUE,失败时为FALSE
返回类型:布尔值
创建一个新表。用法:请参阅[创建表格](关于:空白#创建表格)。
drop_column($table, $column_name)
参数: | $ table(string) - 表名$ column_name(array) - 要删除的列名 |
---|---|
返回: | 成功为TRUE,失败为FALSE |
返回类型: | 布尔 |
$ table(string) - 表名
$ column_name(array) - 要删除的列名称
返回:成功时为TRUE,失败时为FALSE
返回类型:布尔值
从表中删除一列。用法:请参见[从表中删除列](about:blank#从表中删除列)。
drop_database($db_name)
参数: | $ db_name(字符串) - 要删除的数据库的名称 |
---|---|
返回: | 成功为TRUE,失败为FALSE |
返回类型: | 布尔 |
$ db_name(字符串) - 要删除的数据库的名称
返回:成功时为TRUE,失败时为FALSE
返回类型:布尔值
丢弃数据库。用法:请参阅[创建和删除数据库](关于:空白#创建和删除数据库)。
drop_table($table_name[, $if_exists = FALSE])
参数: | $ table(string) - 要删除的表的名称$ if_exists(string) - 设置为TRUE以添加'IF EXISTS'子句 |
---|---|
返回: | 成功为TRUE,失败为FALSE |
返回类型: | 布尔 |
$ table(string) - 要删除的表的名称
$ if_exists(string) - 设置为TRUE以添加'IF EXISTS'子句
返回:成功时为TRUE,失败时为FALSE
返回类型:布尔值
丢下一张桌子。用法:请参阅[删除表](关于:空白#删除表)。
modify_column($table, $field)
参数: | $ table(string) - 表名$ field(array) - 列定义(s) |
---|---|
返回: | 成功为TRUE,失败为FALSE |
返回类型: | 布尔 |
$ table(string) - 表名
$ field(array) - 列定义(s)
返回:成功时为TRUE,失败时为FALSE
返回类型:布尔值
修改表格列。用法:请参见[修改表格中的列](about:blank#modify-a-column-in-a-table)。
rename_table($table_name, $new_table_name)
参数: | $ table(string) - 表中的当前值$ new_table_name(string) - 表的新名称 |
---|---|
返回: | 成功为TRUE,失败为FALSE |
返回类型: | 布尔 |
$ table(string) - 表中的当前值
$ new_table_name(字符串) - 表的新名称
返回:成功时为TRUE,失败时为FALSE
返回类型:布尔值
重命名表格。用法:请参阅[重命名表](about:blank#renaming-a-table)。