迁移

迁移是一種方便的方法,让你在一个結構化和有組織的方式下改變你的資料庫。你可以手工编輯 SQL 片段,然後負責通知其他开发人員需要去执行它們。你也必須保持追蹤那些在下次佈署時,需要針對生產機器执行的變化。

資料表 `migration` 追蹤那些已经被运行的迁移,因此你所需要做的,就只是更新你的应用程序档案,并呼叫 Migrate::current() 以計算出應該被运行的迁移。current 版本能在 core/config/migration.php 裡找到,所以就像任何其他配置档案一樣,你應該複製一份到 app/config 進行修改。

配置

类型 預設 描述
folder 字串
								'migrations/'
							
迁移档案将被找到的文件夾。
connection 字串
								null
							
要用來寫入迁移的資料庫連線的配置名稱。
table 字串
								'migration'
							
用來儲存迁移資料的資料庫表。

請注意: 在运行迁移之後,配置文件将被覆寫版本資訊。这些版本號在內部使用,并且不應該被改變。

建立迁移

在 app/migrations 文件夾中建立一个档案。前綴應为一个從 001 起遞增的計数,不跳號且不重複。第一个将像 app/migrations/001_example.php

namespace Fuel\Migrations;

class Example
{

    function up()
    {
        \DBUtil::create_table('posts', array(
			'id' => array('type' => 'int', 'constraint' => 5),
			'title' => array('type' => 'varchar', 'constraint' => 100),
			'body' => array('type' => 'text'),
		), array('id'));
    }

    function down()
    {
       \DBUtil::drop_table('posts');
    }
}

执行迁移

迁移可以兩種方法执行:

  1. Migrate 类別
  2. Oil 提煉命令

Oil 命令使用提煉命令以呼叫迁移 任務

$ php oil refine migrate
$ php oil refine migrate:current
$ php oil refine migrate:up
$ php oil refine migrate:down
$ php oil refine migrate --version=10

迁移也支援模組和套件,如果你想要迁移全部的話, 可以在 oil 命令列指定,或只指定类別和(或)套件。如果你这樣做,你可以使用 '--default', 以表明你要包含应用程序的迁移。

$ php oil refine migrate -all
$ php oil refine migrate --modules=module1,module2 --packages=package1
$ php oil refine migrate:up --packages=package1
$ php oil refine migrate:down --modules=module1,module2 --default
$ php oil refine migrate --version=10

請注意: migrate:current 任務符合你的架構到被列在 fuel/[app|core]/config/migrate.php 裡的版本,就像你才剛得到一份应用程序的副本,該副本最新的迁移不被認为是穩定的。使用 Oil 進行迁移将会修改此迁移配置版號, 所以 current 命令在許多情況下将是不相關的。

略過迁移

你可以藉由使你的 up()down() 方法回傳 false 來中斷迁移处理。 如果你的迁移具有外部相依性,这可能是有用的,例如, 在不同的迁移中建立一張表的存在。

这将只中斷目前被处理的迁移堆疊,無論应用程序迁移,或者在一个单一模組或套件的迁移。 所有在其他堆疊的迁移将正常被处理。