首页 > 开发 > PHP > 正文

yii2.0数据库迁移教程【多个数据库同时同步数据】

2024-05-04 22:52:15
字体:
来源:转载
供稿:网友

本文讲述了yii2.0数据库迁移的方法。分享给大家供大家参考,具体如下:

创建迁移

使用如下命令来创建一个新的迁移:

yii migrate/create <name>

必填参数 name 的作用是对新的迁移做一个简要的描述。例如,如果这个迁移是用来往多个数据库同一张表  ( 假设每个数据库都有news表 )   添加字段的,那么你可以使用addColumn_news (该名称自定义)这个名称并运行如下命令:

yii migrate/create addColumn_news

注意:因为 name 参数会被用来生成迁移的类名的一部分,所以该参数应当只包含字母、数字和下划线。

如上命令将会在 @app/migrations 目录下创建一个新的名为 m150101_185401_addColumn_news.php 的 PHP 类文件。该文件包含如下的代码,它们用来声明一个迁移类 m150101_185401_addColumn_news,并附有代码框架:

<?phpuse yii/db/Schema;use yii/db/Migration;class m150101_185401_addColumn_news extends Migration{//createDbs 该方法是获取数据库对象返回private function createDbs(){  $dbs = [];  $dbs_info =/Yii::$app->params['db'];  foreach($dbs_info as $k=>$v){    $dbs[$k] = /Yii::createObject($v);  }  return $dbs;}//up() 该方法是往不同的数据库的news表添加 name,nickname,age,sex,site_id等字段public function up(){  $dbs = $this->createDbs();  foreach($dbs as $v){   //《------遍历讲字段同时添加到不同的数据库中    $this->db=$v;    $this->addColumn('{{%news}}','name','varchar(20)');    $this->addColumn('{{%news}}','nickname','varchar(20)');    $this->addColumn('{{%news}}','age','int(3)');    $this->addColumn('{{%news}}','sex','int(1)');    $this->addColumn('{{%news}}','site_id','int(5)');  }}//down()  该方法与up()方法相反,是删除字段的意思public function down(){  $dbs = $this->createDbs();  foreach($dbs as $v){    $this->db=$v;    $this->dropColumn('{{%news}}','name','varchar(20)');    $this->dropColumn('{{%news}}','nickname','varchar(20)');    $this->dropColumn('{{%news}}','age','int(3)');    $this->dropColumn('{{%news}}','sex','int(1)');    $this->dropColumn('{{%news}}','site_id','int(5)');  }}}

每个数据库迁移都会被定义为一个继承自 yii/db/Migration 的 PHP 类。类的名称按照 m<YYMMDD_HHMMSS>_<Name> 的格式自动生成,其中

<YYMMDD_HHMMSS> 指执行创建迁移命令的 UTC 时间。

<Name> 和你执行命令时所带的 name 参数值相同。

在迁移类当中,你应当在 up() 方法中编写改变数据库结构的代码。你可能还需要在 down() 方法中编写代码来恢复由 up() 方法所做的改变。 当你通过 migration 升级数据库时, up() 方法将会被调用,反之, down() 将会被调用。如下代码展示了如何通过迁移类来创建一张 news 表:

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表