迁移 - 一般
迁移是一种方便的方法,让你在一个结构化和有组织的方式下改变你的资料库。你可以手工编辑 SQL 片段,然后负责通知其他开发人员需要去执行它们。你也必须保持追蹤那些在下次布署时,需要针对生产机器执行的变化。
资料表 `migration` 追蹤那些已经被运行的迁移,因此你所需要做的,就只是更新你的应用程序档案,并呼叫 Migrate::current() 以计算出应该被运行的迁移。current 版本能在 core/config/migration.php 里找到,所以就像任何其他配置档案一样,你应该複製一份到 app/config 进行修改。
配置
键 | 类型 | 预设 | 描述 |
---|---|---|---|
folder | 字串 |
| 迁移档案将被找到的文件夹。 |
connection | 字串 |
| 要用来写入迁移的资料库连线的配置名称。 |
table | 字串 |
| 用来储存迁移资料的资料库表。 |
请注意: 在运行迁移之后,配置文件将被覆写版本资讯。这些版本号在内部使用,并且不应该被改变。
建立迁移
在 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');
}
}
执行迁移
迁移可以两种方法执行:
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 来中断迁移处理。 如果你的迁移具有外部相依性,这可能是有用的,例如, 在不同的迁移中建立一张表的存在。
这将只中断目前被处理的迁移堆叠,无论应用程序迁移,或者在一个单一模组或套件的迁移。 所有在其他堆叠的迁移将正常被处理。