在开发数据库驱动的应用程序期间,数据库结构随源代码一起发展。Yii提供了数据库迁移功能,可让您跟踪数据库更改。
Yii提供以下迁移命令行工具-
- 创建新的迁移
- 还原迁移
- 应用迁移
- 重新应用迁移
- 显示迁移状态和历史记录
创建迁移
让我们创建一个新的数据库迁移。
步骤1-在基本应用程序模板的项目根目录内,打开控制台窗口并运行。
./yii migrate/create add_news_table
上面的命令将在migrations文件夹中创建一个新的迁移文件(在本例中为m160113_102634_add_news_table.php)。
该文件包含以下代码-
<?php use yii\db\Schema; use yii\db\Migration; class m160113_102634_add_news_table extends Migration { public function up() { } public function down() { echo "m160113_102634_add_news_table cannot be reverted.\n"; return false; } /* // Use safeUp/safeDown to run migration code within a transaction public function safeUp() { } public function safeDown() { } */ } ?>
每个数据库迁移都是一个PHP类,扩展了yii \ db \ Migration类。类名以以下格式生成-
m<YYMMDD_HHMMSS>_<Name>
其中<YYMMDD_HMMSS>是执行迁移命令的UTC日期时间,而<Name>是您在控制台命令中提供的参数。
升级数据库时将调用up()方法,而降级时将调用down()方法。
步骤2-要将新表添加到数据库,请以这种方式修改迁移文件。
<?php use yii\db\Schema; use yii\db\Migration; class m160113_102634_add_news_table extends Migration { public function up() { $this->createTable("news", [ "id" => Schema::TYPE_PK, "title" => Schema::TYPE_STRING, "content" => Schema::TYPE_TEXT, ]); } public function down() { $this->dropTable('news'); } /* // Use safeUp/safeDown to run migration code within a transaction public function safeUp() { } public function safeDown() { } */ } ?>
在上面的代码中,我们在up()方法中创建了一个名为news的新表,并将该表放入了down()方法中。
该消息表由三个字段组成:ID,标题和内容。创建表或列时,我们应使用抽象类型,以便迁移独立于数据库类型。例如,对于MySQL,TYPE_PK将转换为int(11)NOT NUL AUTO_INCREMETN PRIMARY KEY。
步骤3-要升级数据库,请运行此命令。
./yii migrate
上面的命令将列出所有尚未应用的可用迁移。然后,如果您确认要应用迁移,它将在所有新的迁移类中运行safeUp()或up()。
步骤4-要仅应用三个可用的迁移,可以运行。
./yii migrate 3
步骤5-您还可以定义应将数据库迁移到的特定迁移。
#使用时间戳记指定迁移
yii migrate/to 160202_195501
#使用可由strtotime()解析的字符串
yii migrate/to "2016-01-01 19:55:01"
#使用全名
yii migrate/to m160202_195501_create_news_table
#使用UNIX时间戳
yii migrate/to 1393964718
步骤6-要还原迁移(执行down()或safeDown()方法),请运行。
./yii migrate/down
步骤7-要还原最近应用的最多五个迁移,可以运行。
./yii migrate/down 5
步骤8-要重做(还原并再次应用)迁移,请运行。
./yii migrate/redo
要列出已应用的迁移,请使用以下命令-
- yii migration / new #显示前10个新迁移
- yii migration / new 3 #显示前3个新迁移
- yii migration / new all #显示所有新的迁移
- yii migration / history #显示最近进行的10次迁移
- yii migration / history 20 #显示最近进行的20次迁移
- yii migration / history all #显示所有已应用的迁移
有时您需要在特定表中添加或删除列。您可以使用addColumn()和dropColumn()方法。
步骤1-创建一个新的迁移。
./yii migrate/create add_category_to_news
步骤2-以这种方式修改新创建的迁移文件。
<?php use yii\db\Schema; use yii\db\Migration; class m160113_110909_add_category_to_news extends Migration { public function up() { $this->addColumn('news', 'category', $this->integer()); } public function down() { $this->dropColumn('news', 'category'); } } ?>
现在,如果您运行./yii migration,则应该将类别列添加到新闻表中。相反,如果运行./yii migration / down 1,则应该删除类别列。
执行数据库迁移时,确保每个迁移成功或失败很重要。建议将数据库操作包含在事务中。要实现事务迁移,您只需将迁移代码放入safeUp()和safeDown()方法中。如果这些方法中的任何操作失败,则将回滚所有先前的操作。
之前的“交易方式”示例为-
<?php use yii\db\Schema; use yii\db\Migration; class m160113_110909_add_category_to_news extends Migration { public function safeUp() { $this->addColumn('news', 'category', $this->integer()); } public function safeDown() { $this->dropColumn('news', 'category'); } } ?>
所述YII \分贝\迁移类提供用于操纵数据库下列方法-
- execute() -执行原始SQL语句
- createTable() -创建一个表
- namedTable() -重命名表
- insert() -插入一行
- batchInsert() -插入多行
- update() -更新行
- delete() -删除行
- addColumn() -添加一列
- namedColumn() -重命名列
- dropColumn() -删除列
- alterColumn() -更改列
- dropTable() -删除表
- truncateTable() -删除表中的所有行
- createIndex() -创建一个索引
- dropIndex() -删除索引
- addPrimaryKey() -添加一个主键
- dropPrimaryKey() -删除主键
- addForeignKey() -添加外键
- dropForeignKey() -删除外键
作者:terry,如若转载,请注明出处:https://www.web176.com/yii/405.html