Yii迁移多个数据库 - 指定数据库?

时间:2014-08-25 16:19:50

标签: php mysql sqlite yii database-migration

我们在Yii上建立了一个巨大的应用程序。

到目前为止,迁移是通过在phpliteadmin / phpmyadmin中复制粘贴SQL转储来完成的,但这不太方便。

我想CDbMigration使用yiic migrateclass do_stuff extends CDbMigration { public function up() { // create table } public function down() { // drop table } }

问题是我们有两个数据库 - 一个用于配置和设置的小sqlite,以及用于存储一些历史记录的大型mysql。

如何指定迁移所属的数据库?

这是基本的迁移结构,仅供参考。

{{1}}

2 个答案:

答案 0 :(得分:1)

config.php文件中,在components数组中指定数据库连接。

    'db1'=>array(
                'class'=>'CDbConnection',
                'connectionString' => 'mysql:charset=utf8mb4;host=localhost;dbname=dbname1',
                'username' => 'root',
                'password' => 'root',
                'charset' => 'utf8',
            ),
    'db2'=>array(
                'class'=>'CDbConnection',
                'connectionString' => 'mysql:charset=utf8mb4;host=localhost;dbname=dbname2',
                'username' => 'root',
                'password' => 'root',
                'charset' => 'utf8',
            ),

然后在迁移中,您可以执行以下操作:

protected $dbConnection1;
protected function getDbConnection1()
{
    if (null !== $this->dbConnection1) {
        return $this->dbConnection1;
    }

    return $this->dbConnection1 = Yii::app()->getComponent('db1');
}

重复第二次连接。

然后使用这些方法获取每个数据库的CDbConnection,您可以从中创建要执行的命令。

答案 1 :(得分:1)

您可以使用CDbMigration::setDbConnection()来更改默认值,或覆盖getDbConnection()方法。这类似于另一个提议的解决方案,但是它有一个错字,并且它必须是一个公共功能,因此我在此处提供了解决方法。

在迁移中,包括以下内容(将db1更改为配置文件中定义的连接名称)

protected $dbConnection1;
public function getDbConnection()
{
   if (null !== $this->dbConnection1) {
      return $this->dbConnection1;
   }

   return $this->dbConnection1 = Yii::app()->getComponent('db1');
}