W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
遷移是一種有條理、有組織的方式更改數(shù)據(jù)庫(kù)的便捷方式。你可以手動(dòng)編輯SQL的片段,然后你要負(fù)責(zé)告訴其他開(kāi)發(fā)人員他們也需要去運(yùn)行這段SQL。你還必須跟蹤下次部署時(shí)需要對(duì)生產(chǎn)機(jī)器運(yùn)行哪些更改。
數(shù)據(jù)庫(kù)表遷移會(huì)跟蹤已經(jīng)運(yùn)行的遷移,因此您只需更新應(yīng)用程序文件并調(diào)用$migration->current()以確定應(yīng)運(yùn)行哪些遷移。當(dāng)前版本位于application/Config/Migrations.php中。
每個(gè)遷移都按數(shù)字順序向前或向后運(yùn)行,具體取決于所采用的方法。有兩種編號(hào)樣式可供選擇:
可以使用application/Config/Migrations.php文件中的$type設(shè)置選擇所需的樣式。默認(rèn)設(shè)置為時(shí)間戳。
無(wú)論您選擇使用哪種編號(hào)樣式,請(qǐng)?jiān)谶w移文件前加上遷移編號(hào),后跟下劃線和遷移的描述性名稱(chēng)。例如:
這將是新博客站點(diǎn)的首次遷移。所有遷移都在application/Database/Migrations/ 目錄中,并命名,如20121031100537_Add_blog.php。
<?php namespace AppDatabaseMigrations;
class Migration_Add_blog extends CodeIgniterDatabaseMigration {
public function up() {
$this->forge->addField([
‘blog_id’ => [
‘type’ => ‘INT’, ‘constraint’ => 5, ‘unsigned’ => TRUE, ‘a(chǎn)uto_increment’ => TRUE
], ‘blog_title’ => [
‘type’ => ‘VARCHAR’, ‘constraint’ => ‘100’,
], ‘blog_description’ => [
‘type’ => ‘TEXT’, ‘null’ => TRUE,
],
]); $this->forge->addKey(‘blog_id’, TRUE); $this->forge->createTable(‘blog’);
}
public function down() {
$this->forge->dropTable(‘blog’);
}
}
然后在application/Config/Migrations.php中設(shè)置$currentVersion = 20121031100537;。
數(shù)據(jù)庫(kù)連接和數(shù)據(jù)庫(kù)Forge類(lèi)都可以通過(guò) $this->db和$this->forge分別使用。
或者,你可以使用命令行調(diào)用來(lái)生成框架遷移文件。請(qǐng)參閱下面的更多細(xì)節(jié)。
$currentVersion設(shè)置允許你標(biāo)記應(yīng)用程序命名空間應(yīng)設(shè)置的位置。這對(duì)于在生產(chǎn)環(huán)境中使用尤其有用。在你的應(yīng)用程序中,你始終可以將遷移更新到當(dāng)前版本,而不是最新版本,以確保生產(chǎn)和登臺(tái)服務(wù)器正在運(yùn)行正確的架構(gòu)。在開(kāi)發(fā)服務(wù)器上,你可以為尚未準(zhǔn)備好生產(chǎn)的代碼添加其他遷移。通過(guò)使用該latest()方法,你可以確保你的開(kāi)發(fā)機(jī)器始終運(yùn)行前沿架構(gòu)。
只能針對(duì)單個(gè)數(shù)據(jù)庫(kù)組運(yùn)行遷移。如果在application/Config/Database.php中定義了多個(gè)組 ,則它將針對(duì)該$defaultGroup同一配置文件中指定的組運(yùn)行。有時(shí)你可能需要為不同的數(shù)據(jù)庫(kù)組使用不同的模式。也許你有一個(gè)用于所有常規(guī)站點(diǎn)信息的數(shù)據(jù)庫(kù),而另一個(gè)數(shù)據(jù)庫(kù)用于關(guān)鍵任務(wù)數(shù)據(jù)。通過(guò)$DBGroup在遷移上設(shè)置屬性,可以確保僅針對(duì)正確的組運(yùn)行遷移。此名稱(chēng)必須與數(shù)據(jù)庫(kù)組的名稱(chēng)完全匹配:
class Migration_Add_blog extends CodeIgniterDatabaseMigration {
protected $DBGroup = ‘a(chǎn)lternate_db_group’;
public function up() { … }
public function down() { … }
}
遷移庫(kù)可以自動(dòng)掃描你在application/Config/Autoload.php中定義的所有名稱(chēng)空間 及其$psr4屬性以匹配目錄名稱(chēng)。它將包括它在Database/Migrations中找到的所有遷移。
每個(gè)命名空間都有自己的版本序列,這將幫助您升級(jí)和降級(jí)每個(gè)模塊(命名空間),而不會(huì)影響其他命名空間。
例如,假設(shè)我們?cè)贏utoload配置文件中定義了以下命名空間:
$psr4 = [
‘App’ => APPPATH, ‘MyCompany’ => ROOTPATH.’MyCompany’
];
這將查找位于APPPATH/Database/Migrations和ROOTPATH/Database/Migrations的任何遷移。這使得在可重用的模塊化代碼套件中包含遷移變得簡(jiǎn)單。
在此示例中,一些簡(jiǎn)單的代碼放在application/Controllers/Migrate.php中以更新架構(gòu):
<?php
class Migrate extends CodeIgniterController {
public function index() {
$migrate = ConfigServices::migrations();
try { $migrate->current(); } catch (Exception $e) {
// Do something with the error here…
}
}
}
CodeIgniter附帶了幾個(gè):doc:commands </cli/cli_commands>,它們可以從命令行獲得,以幫助你處理遷移。這些工具不需要使用遷移,但可能會(huì)使那些希望使用它們的人更容易。這些工具主要提供對(duì)MigrationRunner類(lèi)中可用的相同方法的訪問(wèn)。
latest
將所有數(shù)據(jù)庫(kù)組遷移到最新的可用遷移:
\& php spark migrate:latest
你可以使用(latest)以下選項(xiàng):
此示例將Blog名稱(chēng)空間遷移到latest:
\& php spark migrate:latest -g test -n Blog
current
遷移(App)命名空間以匹配中設(shè)置的版本$currentVersion。這將根據(jù)需要上下移動(dòng)以匹配指定的版本:
\& php spark migrate:current
你可以使用(current)以下選項(xiàng):
version
遷移到指定的版本。如果未提供任何版本,系統(tǒng)將提示你輸入該版本。
// Asks you for the version… & php spark migrate:version & Version:
// Sequential & php spark migrate:version 007
// Timestamp & php spark migrate:version 20161426211300
你可以使用(version)以下選項(xiàng):
rollback
回滾所有遷移,將所有數(shù)據(jù)庫(kù)組轉(zhuǎn)為空白平板,有效遷移0:
\& php spark migrate:rollback
你可以使用(rollback)以下選項(xiàng):
refresh
首先回滾所有遷移,然后遷移到最新版本,刷新數(shù)據(jù)庫(kù)狀態(tài):
\& php spark migrate:refresh
你可以使用(refresh)以下選項(xiàng):
status
顯示所有遷移的列表及其運(yùn)行的日期和時(shí)間,如果尚未運(yùn)行,則顯示’–’:
\& php spark migrate:status Filename Migrated On First_migration.php 2016-04-25 04:44:22
你可以使用(status)以下選項(xiàng):
create
使用時(shí)間戳格式在application/Database/Migrations中創(chuàng)建框架遷移文件:
\& php spark migrate:create [filename]
你可以使用(create)以下選項(xiàng):
以下是application/Config/Migrations.php中提供的所有遷移配置選項(xiàng)的表。
參數(shù) | 默認(rèn)值 | 可選項(xiàng) | 描述 |
---|---|---|---|
enabled | FALSE | TRUE/FALSE | 啟用或者禁用遷移 |
path | ‘Datebase/Migrations/’ | None | 遷移文件夾的路徑 |
currentVersion | 0 | None | 數(shù)據(jù)庫(kù)所使用的當(dāng)前版本 |
table | migrations | None | 用于存儲(chǔ)當(dāng)前版本的數(shù)據(jù)庫(kù)表名 |
type | ‘timestamp’ | ‘timestamp’/’sequential’ | 用于命名遷移文件的數(shù)字標(biāo)識(shí)符的類(lèi)型 |
*class*`CodeIgniterDatabaseMigrationRunner`
current
($group)
參數(shù): | $group (mixed) – database group name, if null (App) namespace will be used. |
---|---|
返回: | TRUE if no migrations are found, current version string on success, FALSE on failure |
返回類(lèi)型: | mixed |
遷移到當(dāng)前版本(在application / Config / Migrations.php中為$ currentVersion
設(shè)置的任何版本)。
findMigrations
()
返回: | An array of migration files |
---|---|
返回類(lèi)型: | array |
返回在path屬性中找到的遷移文件名數(shù)組。
latest
($namespace, $group)
參數(shù): | $namespace (mixed) – application namespace, if null (App) namespace will be used. |
---|---|
$group (mixed) – database group name, if null default database group will be used. | |
返回: | Current version string on success, FALSE on failure |
返回類(lèi)型: | mixed |
這與current()
的工作方式大致相同,但是Migration類(lèi)將使用文件系統(tǒng)中找到的最新遷移,而不是尋找$ currentVersion
。
latestAll
($group)
參數(shù): | $group (mixed) – database group name, if null default database group will be used. |
---|---|
返回: | TRUE on success, FALSE on failure |
返回類(lèi)型: | mixed |
這種方式與latest()
的工作方式大致相同,但是Migration類(lèi)不會(huì)查找一個(gè)名稱(chēng)空間,而是將使用為所有名稱(chēng)空間找到的最新遷移。
version
($target_version, $namespace, $group)
參數(shù): | $namespace (mixed) – application namespace, if null (App) namespace will be used. |
---|---|
$group (mixed) – database group name, if null default database group will be used. | |
$target_version (mixed) – Migration version to process | |
返回: | TRUE if no migrations are found, current version string on success, FALSE on failure |
返回類(lèi)型: | mixed |
版本可以用于回滾更改或以編程方式前進(jìn)到特定版本。 它的工作方式與current()
相同,但是會(huì)忽略$ currentVersion
。
$migration->version(5);
setNamespace
($namespace)
參數(shù): | $namespace (string) – application namespace. |
---|---|
返回: | The current MigrationRunner instance |
返回類(lèi)型: | CodeIgniterDatabaseMigrationRunner |
設(shè)置庫(kù)應(yīng)查找遷移文件的路徑:
$migration->setNamespace($path)
->latest();
setGroup
($group)
參數(shù): | $group (string) – database group name. |
---|---|
返回: | The current MigrationRunner instance |
返回類(lèi)型: | CodeIgniterDatabaseMigrationRunner |
Sets the path the library should look for migration files:
$migration->setNamespace($path)
->latest();
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: