CodeIgniter 遷移類

2018-07-21 15:40 更新

遷移類

遷移是一種非常方便的途徑來組織和管理你的數(shù)據(jù)庫(kù)變更,當(dāng)你編寫了一小段 SQL 對(duì)數(shù)據(jù)庫(kù)做了修改之后,你就需要告訴其他的開發(fā)者他們也需要運(yùn)行這段 SQL , 而且當(dāng)你將應(yīng)用程序部署到生產(chǎn)環(huán)境時(shí),你還需要記得對(duì)數(shù)據(jù)庫(kù)已經(jīng)做了哪些修改, 需要執(zhí)行哪些 SQL 。

在 CodeIgniter 中,migration 表記錄了當(dāng)前已經(jīng)執(zhí)行了哪些遷移,所以 你需要做的就是,修改你的應(yīng)用程序文件然后調(diào)用$this->migration->current() 方法遷移到當(dāng)前版本,當(dāng)前版本可以在 application/config/migration.php 文件中進(jìn)行設(shè)置。

遷移文件命令規(guī)則

每個(gè)遷移都是根據(jù)文件名中的數(shù)字順序向前或向后運(yùn)行,有兩種不同的數(shù)字格式:

  • 序列格式: 每個(gè)遷移文件以數(shù)字序列格式遞增命名,從 001 開始,每個(gè)數(shù)字都需要占三位, 序列之間不能有間隙。(這是 CodeIgniter 3.0 版本之前的命令方式)
  • 時(shí)間戳格式: 每個(gè)遷移文件以創(chuàng)建時(shí)間的時(shí)間戳來命名,格式為:YYYYMMDDHHIISS (譬如: 20121031100537),這種方式可以避免在團(tuán)隊(duì)環(huán)境下以序列命名可能造成的沖突,而且也是 CodeIgniter 3.0 之后版本中推薦的命名方式。

可以在 application/config/migration.php 文件中的 $config['migration_type'] 參數(shù)設(shè)置命名規(guī)則。

無論你選擇了哪種規(guī)則,將這個(gè)數(shù)字格式作為遷移文件的前綴,并在后面添加一個(gè)下劃線, 再加上一個(gè)描述性的名字。如下所示:

  • 001_add_blog.php (sequential numbering)
  • 20121031100537_add_blog.php (timestamp numbering)

創(chuàng)建一次遷移

這里是一個(gè)新博客站點(diǎn)的第一次遷移的例子,所有的遷移文件位于 application/migrations/ 目錄, 并命名為這種格式:20121031100537_add_blog.php 。

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

class Migration_Add_blog extends CI_Migration {

    public function up()
    {
        $this->dbforge->add_field(array(
            'blog_id' => array(
                'type' => 'INT',
                'constraint' => 5,
                'unsigned' => TRUE,
                'auto_increment' => TRUE
            ),
            'blog_title' => array(
                'type' => 'VARCHAR',
                'constraint' => '100',
            ),
            'blog_description' => array(
                'type' => 'TEXT',
                'null' => TRUE,
            ),
        ));
        $this->dbforge->add_key('blog_id', TRUE);
        $this->dbforge->create_table('blog');
    }

    public function down()
    {
        $this->dbforge->drop_table('blog');
    }
}

然后在 application/config/migration.php 文件中設(shè)置:$config['migration_version'] = 20121031100537;

使用范例

在這個(gè)例子中,我們?cè)?nbsp;application/controllers/Migrate.php 文件中添加如下的代碼來更新數(shù)據(jù)庫(kù):

<?php

class Migrate extends CI_Controller
{

    public function index()
    {
        $this->load->library('migration');

        if ($this->migration->current() === FALSE)
        {
            show_error($this->migration->error_string());
        }
    }

}

遷移參數(shù)

下表為所有可用的遷移參數(shù)。

參數(shù) 默認(rèn)值 可選項(xiàng) 描述
migration_enabled FALSE TRUE / FALSE 啟用或禁用遷移
migration_path APPPATH.'migrations/' None 遷移目錄所在位置
migration_version 0 None 當(dāng)前數(shù)據(jù)庫(kù)所使用版本
migration_table migrations None 用于存儲(chǔ)當(dāng)前版本的數(shù)據(jù)庫(kù)表名
migration_auto_latest FALSE TRUE / FALSE 啟用或禁用自動(dòng)遷移
migration_type 'timestamp' 'timestamp' / 'sequential' 遷移文件的命名規(guī)則

類參考

classCI_Migration

current()

返回: TRUE if no migrations are found, current version string on success, FALSE on failure
返回類型: mixed

遷移至當(dāng)前版本。(當(dāng)前版本通過 application/config/migration.php 文件的 $config['migration_version'] 參數(shù)設(shè)置)

error_string()

返回: Error messages
返回類型: string

返回遷移過程中發(fā)生的錯(cuò)誤信息。

find_migrations()

返回: An array of migration files
返回類型: array

返回 migration_path 目錄下的所有遷移文件的數(shù)組。

latest()

返回: Current version string on success, FALSE on failure
返回類型: mixed

這個(gè)方法和 current() 類似,但是它并不是遷移到 $config['migration_version'] 參數(shù)所對(duì)應(yīng)的版本,而是遷移到遷移文件中的最新版本。

version($target_version)

參數(shù):

  • $target_version (mixed) -- Migration version to process

返回: TRUE if no migrations are found, current version string on success, FALSE on failure

返回類型: mixed

遷移到特定版本(回退或升級(jí)都可以),這個(gè)方法和 current() 類似,但是忽略 $config['migration_version'] 參數(shù),而是遷移到用戶指定版本。

$this->migration->version(5);
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)