use yiidbSchema;
use yiidbMigration;
class m150101_185401_create_news_table extends yiidbMigration
{
public function up()
{
$this->createTable('news', [
'id' => Schema::TYPE_PK,
'title' => Schema::TYPE_STRING . ' NOT NULL',
'content' => Schema::TYPE_TEXT,
]);
}
public function down()
{
$this->dropTable('news');
}
}
注意:并不是所有迁移都是可恢复的。例如,如果 up() 方法删除了表中的一行数据,这将无法通过 down() 方法来恢复这条数据。有时候,你也许只是懒得去执行 down() 方法了,因为它在恢复数据库迁移方面并不是那么的通用。在这种情况下,你应当在down() 方法中返回 false 来表明这个 migration 是无法恢复的。
访问数据库的方法
迁移的基类 yiidbMigration 提供了一整套访问和操作数据库的方法。你可能会发现这些方法的命名和 yiidbCommand 类提供的 DAO 方法很类似。 例如,yiidbMigration::createTable() 方法可以创建一张新的表,这和 yiidbCommand::createTable() 的功能是一模一样的。
使用 yiidbMigration 所提供的方法的好处在于你不需要再显式的创建 yiidbCommand 实例,而且在执行每个方法的时候都会显示一些有用的信息来告诉我们数据库操作是不是都已经完成,还有它们完成这些操作花了多长时间等等。
如下是所有这些数据库访问方法的列表:
yiidbMigration::execute(): 执行一条 SQL 语句
yiidbMigration::insert(): 插入单行数据
yiidbMigration::batchInsert(): 插入多行数据
yiidbMigration::update(): 更新数据
yiidbMigration::delete(): 删除数据
yiidbMigration::createTable(): 创建表
yiidbMigration::renameTable(): 重命名表名
yiidbMigration::dropTable(): 删除一张表
yiidbMigration::truncateTable(): 清空表中的所有数据
yiidbMigration::addColumn(): 加一个字段
yiidbMigration::renameColumn(): 重命名字段名称
yiidbMigration::dropColumn(): 删除一个字段
yiidbMigration::alterColumn(): 修改字段
yiidbMigration::addPrimaryKey(): 添加一个主键
yiidbMigration::dropPrimaryKey(): 删除一个主键
yiidbMigration::addForeignKey(): 添加一个外键
yiidbMigration::dropForeignKey(): 删除一个外键
yiidbMigration::createIndex(): 创建一个索引
yiidbMigration::dropIndex(): 删除一个索引
提交迁移
为了将数据库升级到最新的结构,你应该使用如下命令来提交所有新的迁移:
yii migrate
这条命令会列出迄今为止所有未提交的迁移。如果你确定你需要提交这些迁移,它将会按照类名当中的时间戳的顺序,一个接着一个的运行每个新的迁移类里面的 up() 或者是 safeUp() 方法。如果其中任意一个迁移提交失败了,那么这条命令将会退出并停止剩下的那些还未执行的迁移。







