Yii-数据库迁移

在开发数据库驱动的应用程序期间,数据库结构随源代码一起发展。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
Yii-数据库迁移

上面的命令将列出所有尚未应用的可用迁移。然后,如果您确认要应用迁移,它将在所有新的迁移类中运行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
Yii-数据库迁移

步骤7-要还原最近应用的最多五个迁移,可以运行。

./yii migrate/down 5

步骤8-要重做(还原并再次应用)迁移,请运行。

./yii migrate/redo
Yii-数据库迁移

要列出已应用的迁移,请使用以下命令-

  • 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

(0)
打赏 支付宝 支付宝 微信 微信
terryterry
上一篇 2020年10月23日 下午3:49
下一篇 2020年10月23日 下午4:00

相关推荐

发表回复

登录后才能评论