CodeIgniter4 使用 Database Forge 維護數(shù)據(jù)庫

2020-08-17 16:37 更新

數(shù)據(jù)庫工廠類(Database Forge)包含了幫助你管理你的數(shù)據(jù)庫的一些相關(guān)方法。

初始化 Forge 類

重要

為了初始化forge類,你的數(shù)據(jù)庫驅(qū)動程序必須已經(jīng)在運行,因為forge類是依賴它運行的。

加載 Forge 類的代碼如下:

$forge = \Config\Database::forge();

你可以將另外一個數(shù)據(jù)可組名傳遞給 DB Forge加載程序,以防要管理的數(shù)據(jù)庫不是默認數(shù)據(jù)庫:

$this->myforge = $this->load->dbforge('other_db');

在上面的示例中,我們傳遞的是另一個數(shù)據(jù)庫的名稱作為第一個參數(shù)來連接。

創(chuàng)建和刪除數(shù)據(jù)庫

$forge->createDatabase(‘db_name’)

用于創(chuàng)建指定數(shù)據(jù)庫,根據(jù)成敗返回 TRUE 或 FALSE:

if ($forge->createDatabase('my_db'))
{
        echo 'Database created!';
}

$forge->dropDatabase(‘db_name’)

用于刪除指定數(shù)據(jù)庫,根據(jù)成敗返回 TRUE 或 FALSE:

if ($forge->dropDatabase('my_db'))
{
        echo 'Database deleted!';
}

創(chuàng)建和刪除數(shù)據(jù)表

在創(chuàng)建表時,你可能希望做一些事情。如添加字段,向表中添加鍵,更改列。CodeIgniter 為此提供了一種機制。

添加字段

字段是通過關(guān)聯(lián)數(shù)組創(chuàng)建的。在數(shù)組中,必須包括與字段的數(shù)據(jù)類型相關(guān)的’type’鍵。例如,int、varchar、text等。許多數(shù)據(jù)類型(例如varchar)還需要“約束”鍵。

$fields = array(
        'users' => array(
                'type'       => 'VARCHAR',
                'constraint' => '100',
        ),
);
// 添加字段時將轉(zhuǎn)換為"users VARCHAR(100)"。

此外,可以使用以下鍵/值:

  • unsigned/true : 在字段定義中生成 “UNSIGNED” 。
  • default/value : 在字段定義中生成默認值。
  • null/true : 在字段定義中生成”NULL”。如果沒有這個,該字段將默認為”NOT NULL”。
  • auto_increment/true : 在字段上生成auto_increment標志。請注意,字段類型必須是支持此類型的類型,例如整數(shù)。
  • unique/true : 為字段定義生成唯一鍵。

$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,
        ),
);

定義字段后,可以使用 $forge->addField($fields); 然后調(diào)用 createTable() 方法。

$forge->addField()

add fields方法將接受上述數(shù)組。

將字符串作為字段傳遞

如果你確切知道要如何創(chuàng)建字段,可以使用addField()方法將字符串傳遞給字段定義

$forge->addField("label varchar(100) NOT NULL DEFAULT 'default label'");

注解

將原始字符串作為字段傳遞后,不能用 add_key() 對這些字段進行調(diào)用。

對 add_field() 的多次調(diào)用是累積的。

創(chuàng)建一個id字段

創(chuàng)建id字段有一個特殊例外。具有類型id的字段將自動分配為 INT(9) auto_incrementing 主鍵。

$forge->addField('id');
// 提出 id INT(9) NOT NULL AUTO_INCREMENT

添加鍵

通常來說,表都會有鍵。這可以使用 $forge->addKey(‘field’)方法來實現(xiàn)。第二個參數(shù)設(shè)置是可選的,設(shè)置為 TRUE 將使其成為主鍵, 第三個參數(shù)設(shè)置為 TRUE 將使其成為唯一鍵。注意 addKey()方法必須緊跟在createTable()方法后面。

包含多列的非主鍵必須使用數(shù)組來添加,下面是 MySQL 的例子。

$forge->addKey('blog_id', TRUE);
// gives PRIMARY KEY `blog_id` (`blog_id`)


$forge->addKey('blog_id', TRUE);
$forge->addKey('site_id', TRUE);
// gives PRIMARY KEY `blog_id_site_id` (`blog_id`, `site_id`)


$forge->addKey('blog_name');
// gives KEY `blog_name` (`blog_name`)


$forge->addKey(array('blog_name', 'blog_label'));
// gives KEY `blog_name_blog_label` (`blog_name`, `blog_label`)


$forge->addKey(array('blog_id', 'uri'), FALSE, TRUE);
// gives UNIQUE KEY `blog_id_uri` (`blog_id`, `uri`)

為了使代碼讀取更加客觀,還可以使用特定的方法添加主鍵和唯一鍵。:

$forge->addPrimaryKey('blog_id');
// gives PRIMARY KEY `blog_id` (`blog_id`)

外鍵有助于跨表強制執(zhí)行關(guān)系和操作。對于支持外鍵的表,可以直接在forge中添加它們。:

$forge->addUniqueKey(array('blog_id', 'uri'));
// gives UNIQUE KEY `blog_id_uri` (`blog_id`, `uri`)

添加外鍵

$forge->addForeignKey('users_id','users','id');
// gives CONSTRAINT `TABLENAME_users_foreign` FOREIGN KEY(`users_id`) REFERENCES `users`(`id`)

你可以為約束的 “on delete” 和 “on update” 屬性指定所需的操作:

$forge->addForeignKey('users_id','users','id','CASCADE','CASCADE');
// gives CONSTRAINT `TABLENAME_users_foreign` FOREIGN KEY(`users_id`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE

創(chuàng)建表格

聲明字段和鍵后,你可以根據(jù)如下代碼創(chuàng)建一張新表

$forge->createTable('table_name');
// gives CREATE TABLE table_name

可選的第二個參數(shù)設(shè)置為TRUE時會在定義中添加”IF NOT EXISTS”子句

$forge->createTable('table_name', TRUE);
// gives CREATE TABLE IF NOT EXISTS table_name

你還可以傳遞可選的表屬性,例如MySQL的 ENGINE:

$attributes = array('ENGINE' => 'InnoDB');
$forge->createTable('table_name', FALSE, $attributes);
// produces: CREATE TABLE `table_name` (...) ENGINE = InnoDB DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

注解

除非你指定 CHARACTER SET 和/或 COLLATE 屬性, createTable() 否則將始終使用你配置的 charsetDBCollat 值, 只要它們不為空 (僅限MySQL).

刪除表

執(zhí)行DROP TABLE語句時,可以選擇添加一個IF EXISTS子句。

// Produces: DROP TABLE table_name
$forge->dropTable('table_name');


// Produces: DROP TABLE IF EXISTS table_name
$forge->dropTable('table_name',TRUE);

刪除外鍵

執(zhí)行一個刪除外鍵語句。

// Produces: ALTER TABLE 'tablename' DROP FOREIGN KEY 'users_foreign'
$forge->dropForeignKey('tablename','users_foreign');

注解

SQLite數(shù)據(jù)庫驅(qū)動程序不支持刪除外鍵。

重命名表

執(zhí)行表重命名

$forge->renameTable('old_table_name', 'new_table_name');
// gives ALTER TABLE old_table_name RENAME TO new_table_name

修改表

向表中添加列

$forge->addColumn()

使用 addColumn() 方法用于對現(xiàn)有數(shù)據(jù)表進行修改,它的參數(shù)和上面介紹的字段數(shù)組一樣,并且可以用于無限數(shù)量的附加字段。

$fields = array(
        'preferences' => array('type' => 'TEXT')
);
$forge->addColumn('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)
);

從表中刪除列

$forge->dropColumn()

該語句用于從表中刪除列。

$forge->dropColumn('table_name', 'column_to_drop');

從表中的修改列

$forge->modifyColumn()

此方法的用法與 add_column()相同,只是它是更改現(xiàn)有列,而不是添加新列。為了更改名稱,可以將“名稱”鍵添加到字段定義數(shù)組中。

$fields = array(
        'old_name' => array(
                'name' => 'new_name',
                'type' => 'TEXT',
        ),
);
$forge->modifyColumn('table_name', $fields);
// gives ALTER TABLE table_name CHANGE old_name new_name TEXT

類引用

*class*`CodeIgniterDatabaseForge`

addColumn($table[, $field = array()])

參數(shù): $table (string) – Table name to add the column to
$field (array) – Column definition(s)
返回: TRUE on success, FALSE on failure
返回類型: bool

在表中添加一列。 用法:請參見向表添加列。

addField($field)

參數(shù): $field (array) – Field definition to add
返回: CodeIgniterDatabaseForge instance (method chaining)
返回類型: CodeIgniterDatabaseForge

將一個字段添加到集合中,該字段將用于創(chuàng)建表。 用法:請參閱“添加字段”。

addKey($key[, $primary = FALSE[, $unique = FALSE]])

參數(shù): $key (mixed) – Name of a key field or an array of fields
$primary (bool) – Set to TRUE if it should be a primary key or a regular one
$unique (bool) – Set to TRUE if it should be a unique key or a regular one
返回: CodeIgniterDatabaseForge instance (method chaining)
返回類型: CodeIgniterDatabaseForge

將密鑰添加到將用于創(chuàng)建表的集合中。 用法:請參閱“添加密鑰”。

addPrimaryKey($key)

參數(shù): $key (mixed) – Name of a key field or an array of fields
返回: CodeIgniterDatabaseForge instance (method chaining)
返回類型: CodeIgniterDatabaseForge

將主鍵添加到將用于創(chuàng)建表的集合中。 用法:請參閱“添加密鑰”。

addUniqueKey($key)

參數(shù): $key (mixed) – Name of a key field or an array of fields
返回: CodeIgniterDatabaseForge instance (method chaining)
返回類型: CodeIgniterDatabaseForge

將唯一鍵添加到將用于創(chuàng)建表的集合中。 用法:請參閱“添加密鑰”。

createDatabase($db_name)

參數(shù): $db_name (string) – Name of the database to create
返回: TRUE on success, FALSE on failure
返回類型: bool

創(chuàng)建一個新的數(shù)據(jù)庫。 用法:請參見“創(chuàng)建和刪除數(shù)據(jù)庫”。

createTable($table[, $if_not_exists = FALSE[, array $attributes = array()]])

參數(shù): $table (string) – Name of the table to create
$if_not_exists (string) – Set to TRUE to add an ‘IF NOT EXISTS’ clause
$attributes (string) – An associative array of table attributes
返回: TRUE on success, FALSE on failure
返回類型: bool

創(chuàng)建一個新表。 用法:請參見創(chuàng)建表。

dropColumn($table, $column_name)

參數(shù): $table (string) – Table name
$column_name (array) – The column name to drop
返回: TRUE on success, FALSE on failure
返回類型: bool

從表中刪除列。 用法:請參閱“從表中刪除列”。

dropDatabase($db_name)

參數(shù): $db_name (string) – Name of the database to drop
返回: TRUE on success, FALSE on failure
返回類型: bool

刪除數(shù)據(jù)庫。 用法:請參見“創(chuàng)建和刪除數(shù)據(jù)庫”。

dropTable($table_name[, $if_exists = FALSE])

參數(shù): $table (string) – Name of the table to drop
$if_exists (string) – Set to TRUE to add an ‘IF EXISTS’ clause
返回: TRUE on success, FALSE on failure
返回類型: bool

刪除表。 用法:請參見“刪除表格”。

modifyColumn($table, $field)

參數(shù): $table (string) – Table name
$field (array) – Column definition(s)
返回: TRUE on success, FALSE on failure
返回類型: bool

修改表格列。 用法:請參見“修改表中的列”。

renameTable($table_name, $new_table_name)

參數(shù): $table (string) – Current of the table
$new_table_name (string) – New name of the table
返回: TRUE on success, FALSE on failure
返回類型: bool

重命名表。 用法:請參閱“重命名表格”。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號