CodeIgniter 數(shù)據(jù)庫工廠類

2018-07-21 15:42 更新

數(shù)據(jù)庫工廠類

數(shù)據(jù)庫工廠類提供了一些方法來幫助你管理你的數(shù)據(jù)庫。

Table of Contents

初始化數(shù)據(jù)庫工廠類

重要

由于數(shù)據(jù)庫工廠類依賴于數(shù)據(jù)庫驅(qū)動器,為了初始化該類,你的數(shù)據(jù)庫驅(qū)動器必須已經(jīng)運(yùn)行。

加載數(shù)據(jù)庫工廠類的代碼如下:

$this->load->dbforge()

如果你想管理的不是你正在使用的數(shù)據(jù)庫,你還可以傳另一個(gè)數(shù)據(jù)庫對象到數(shù)據(jù)庫工具類的加載方法:

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

上例中,我們通過第一個(gè)參數(shù)傳遞了一個(gè)自定義的數(shù)據(jù)庫對象,第二個(gè)參數(shù)表示方法將返回 dbforge 對象, 而不是直接賦值給 $this->dbforge 。

注解

兩個(gè)參數(shù)都可以獨(dú)立使用,如果你只想傳第二個(gè)參數(shù),可以將第一個(gè)參數(shù)置空。

一旦初始化結(jié)束,你就可以使用 $this->dbforge 對象來訪問它的方法:

$this->dbforge->some_method();

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

$this->dbforge->create_database('db_name')

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

if ($this->dbforge->create_database('my_db'))
{
    echo 'Database created!';
}

$this->dbforge->drop_database('db_name')

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

if ($this->dbforge->drop_database('my_db'))
{
    echo 'Database deleted!';
}

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

創(chuàng)建表涉及到這樣幾件事:添加字段、添加鍵、修改字段。CodeIgniter 提供了這幾個(gè)方法。

添加字段

字段通過一個(gè)關(guān)聯(lián)數(shù)組來創(chuàng)建,數(shù)組中必須包含一個(gè) 'type' 索引,代表字段的數(shù)據(jù)類型。 例如,INT、VARCHAR、TEXT 等,有些數(shù)據(jù)類型(例如 VARCHAR)還需要加一個(gè) 'constraint' 索引。

$fields = array(
    'users' => array(
        'type' => 'VARCHAR',
        'constraint' => '100',
    ),
);
// will translate to "users VARCHAR(100)" when the field is added.

另外,還可以使用下面的鍵值對:

  • unsigned/true : 在字段定義中生成 "UNSIGNED"
  • default/value : 在字段定義中生成一個(gè)默認(rèn)值
  • null/true : 在字段定義中生成 "NULL" ,如果沒有這個(gè),字段默認(rèn)為 "NOT NULL"
  • auto_increment/true : 在字段定義中生成自增標(biāo)識,注意數(shù)據(jù)類型必須支持這個(gè),譬如整型
$fields = array(
    'blog_id' => array(
        'type' => 'INT',
        'constraint' => 5,
        'unsigned' => TRUE,
        'auto_increment' => TRUE
    ),
    'blog_title' => array(
        'type' => 'VARCHAR',
        'constraint' => '100',
    ),
    'blog_author' => array(
        'type' =>'VARCHAR',
        'constraint' => '100',
        'default' => 'King of Town',
    ),
    'blog_description' => array(
        'type' => 'TEXT',
        'null' => TRUE,
    ),
);

字段定義好了之后,就可以在調(diào)用 create_table() 方法的后面使用 $this->dbforge->add_field($fields); 方法來添加字段了。

$this->dbforge->add_field()

添加字段方法的參數(shù)就是上面介紹的數(shù)組。

使用字符串參數(shù)添加字段

如果你非常清楚的知道你要添加的字段,你可以使用字段的定義字符串來傳給 add_field() 方法

$this->dbforge->add_field("label varchar(100) NOT NULL DEFAULT 'default label'");

注解

多次調(diào)用 add_field() 將會累積

創(chuàng)建 id 字段

創(chuàng)建 id 字段和創(chuàng)建其他字段非常不一樣,id 字段將會自動定義成類型為 INT(9) 的自增主鍵。

$this->dbforge->add_field('id');
// gives id INT(9) NOT NULL AUTO_INCREMENT

添加鍵

通常來說,表都會有鍵。這可以使用 $this->dbforge->add_key('field') 方法來實(shí)現(xiàn)。 第二個(gè)參數(shù)可選,可以將其設(shè)置為主鍵。注意 add_key() 方法必須緊跟在 create_table() 方法的后面。

包含多列的非主鍵必須使用數(shù)組來添加,下面是 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)建表

字段和鍵都定義好了之后,你可以使用下面的方法來創(chuàng)建表:

$this->dbforge->create_table('table_name');
// gives CREATE TABLE table_name

第二個(gè)參數(shù)設(shè)置為 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() 方法 默認(rèn)會使用配置文件中 char_set 和 dbcollat 的值(僅針對 MySQL)。

刪除表

執(zhí)行一個(gè) 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);

重命名表

執(zhí)行一個(gè)重命名表語句。

$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ù)據(jù)表進(jìn)行修改,它的參數(shù)和上面介紹的 字段數(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 語句來為新添加的列指定位置。

例如:

// 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');

修改表中的某個(gè)列

$this->dbforge->modify_column()

該方法的用法和 add_column() 一樣,只是它用于對現(xiàn)有的列進(jìn)行修改,而不是添加新列。 如果要修改列的名稱,你可以在列的定義數(shù)組中添加一個(gè) "name" 索引。

$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

類參考

classCI_DB_forge

add_column($table[, $field = array()[, $_after = NULL]])

參數(shù):

  • $table (string) -- Table name to add the column to
  • $field (array) -- Column definition(s)
  • $_after (string) -- Column for AFTER clause (deprecated)

返回: TRUE on success, FALSE on failure

返回類型: bool

給表添加列。用法參見 給表添加列 。

add_field($field)

參數(shù):

  • $field (array) -- Field definition to add

返回: CI_DB_forge instance (method chaining)

返回類型: CI_DB_forge

添加字段到集合,用于創(chuàng)建一個(gè)表。用法參見 添加字段 。

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

參數(shù):

  • $key (array) -- Name of a key field
  • $primary (bool) -- Set to TRUE if it should be a primary key or a regular one

返回: CI_DB_forge instance (method chaining)

返回類型: CI_DB_forge

添加鍵到集合,用于創(chuàng)建一個(gè)表。用法參見:添加鍵 。

create_database($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ù)庫 。

create_table($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)建表 。

drop_column($table, $column_name)

參數(shù):

  • $table (string) -- Table name
  • $column_name (array) -- The column name to drop

返回: TRUE on success, FALSE on failure

返回類型: bool

刪除某個(gè)表的字段。用法參見:從表中刪除列 。

drop_database($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ù)庫 。

drop_table($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

刪除表。用法參見:刪除表 。

modify_column($table, $field)

參數(shù):

  • $table (string) -- Table name
  • $field (array) -- Column definition(s)

返回: TRUE on success, FALSE on failure

返回類型: bool

修改表的某個(gè)列。用法參見:修改表中的某個(gè)列 。

rename_table($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

公眾號
微信公眾號

編程獅公眾號