direktori cari
Array Array Helper Benchmarking Benchmarking Class Caching Caching Driver Calendaring Calendaring Class CAPTCHA CAPTCHA Helper Config Config Class Cookie Cookie Helper Database Connecting to your Database Custom Function Calls Database Caching Class Database Configuration Database Forge Class Database Metadata Database Quick Start: Example Code Database Reference Database Utility Class DB Driver Reference Generating Query Results Queries Query Builder Class Query Helper Methods Transactions Date Date Helper Directory Directory Helper Download Download Helper Email Email Class Email Helper Encrypt Encrypt Class Encryption Encryption Library File File Helper File Uploading File Uploading Class Form Form Helper Form Validation Form Validation FTP FTP Class Functions compatibility_functions common_functions HTML HTML Helper HTML Table HTML Table Class Image Manipulation Image Manipulation Class Inflector Inflector Helper Input Input Class Javascript Javascript Class Language Language Class Language Helper Loader Loader Class Migrations Migrations Class Number Number Helper Output Output Class Pagination Pagination Class Path Path Helper Security Security Class Security Helper Session Session Library Shopping Cart Shopping Cart Class Smiley Smiley Helper String String Helper Template Parser Template Parser Class Text Text Helper Trackback Trackback Class Typography Typography Class Typography Helper Unit Testing Unit Testing Class URI URL User Agent XML XML-RPC and XML-RPC Server Zip Encoding Zip Encoding Class XML-RPC and XML-RPC Server Classes XML Helper User Agent Class URL Helper URI Class
watak

Database Forge类包含帮助您管理数据库的方法。

目录

  • 数据库伪造类

    • 添加字段

    • 添加键

    • 创建一个表格

    • 丢下一张桌子

    • 重命名表

    • 初始化Forge类

    • 创建和删除数据库

    • 创建和删除表格

 -  [修改表格](about:blank#修改表格)    
     -  [向列添加列](about:blank#将列添加到表中)    
     -  [从表中删除列](about:blank#从表中删除列)    
     -  [修改表格中的列](about:blank#modify-a-column-in-a-table)
 -  [类参考](about:blank#class-reference)

初始化Forge类

重要

为了初始化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字段有一个特殊的例外。类型为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_setdbcollat值添加它们,只要它们不为空(仅限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

返回类型:

布尔

  • $ tablestring) - 要添加列的表名

  • $ fieldarray) - 列定义(s)

  • $ _after字符串) -  AFTER子句的列(不建议使用)

返回:成功时为TRUE,失败时为FALSE
返回类型:布尔值
向表中添加一列。用法:请参阅[将列添加到表](about:blank#将列添加到表)。

add_field($field)

参数:

$ field(array) - 要添加的字段定义

返回:

CI_DB_forge实例(方法链接)

返回类型:

CI_DB_forge

  • $ fieldarray) - 要添加的字段定义

返回:CI \ _DB \ _forge实例(方法链接)
返回类型:CI \ _DB \ _forge
向将用于创建表的集添加一个字段。用法:请参阅[添加字段](关于:空白#添加字段)。

add_key($key[, $primary = FALSE])

参数:

$ key(array) - 键字段的名称$ primary(bool) - 如果它应该是主键或常规键,则设置为TRUE

返回:

CI_DB_forge实例(方法链接)

返回类型:

CI_DB_forge

  • $ key数组) - 一个关键字段的名称

  • $ primarybool) - 如果它应该是主键或常规键,则设置为TRUE

返回:CI \ _DB \ _forge实例(方法链接)
返回类型:CI \ _DB \ _forge
向将用于创建表的集添加一个密钥。用法:请参阅[添加密钥](关于:空白#添加密钥)。

create_database($db_name)

参数:

$ db_name(string) - 要创建的数据库的名称

返回:

成功为TRUE,失败为FALSE

返回类型:

布尔

  • $ db_namestring) - 要创建的数据库的名称

返回:成功时为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

返回类型:

布尔

  • $ tablestring) - 要创建的表的名称

  • $ if_not_existsstring) - 设置为TRUE以添加'IF NOT EXISTS'子句

  • $ attributesstring) - 表格属性的关联数组

返回:成功时为TRUE,失败时为FALSE
返回类型:布尔值
创建一个新表。用法:请参阅[创建表格](关于:空白#创建表格)。

drop_column($table, $column_name)

参数:

$ table(string) - 表名$ column_name(array) - 要删除的列名

返回:

成功为TRUE,失败为FALSE

返回类型:

布尔

  • $ tablestring) - 表名

  • $ column_namearray) - 要删除的列名称

返回:成功时为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

返回类型:

布尔

  • $ tablestring) - 要删除的表的名称

  • $ if_existsstring) - 设置为TRUE以添加'IF EXISTS'子句

返回:成功时为TRUE,失败时为FALSE
返回类型:布尔值
丢下一张桌子。用法:请参阅[删除表](关于:空白#删除表)。

modify_column($table, $field)

参数:

$ table(string) - 表名$ field(array) - 列定义(s)

返回:

成功为TRUE,失败为FALSE

返回类型:

布尔

  • $ tablestring) - 表名

  • $ fieldarray) - 列定义(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

返回类型:

布尔

  • $ tablestring) - 表中的当前值

  • $ new_table_name字符串) - 表的新名称

返回:成功时为TRUE,失败时为FALSE
返回类型:布尔值
重命名表格。用法:请参阅[重命名表](about:blank#renaming-a-table)。
Artikel sebelumnya: Artikel seterusnya: