【问题标题】:Yii Migrations with multiple databases - specify DB?Yii 迁移与多个数据库 - 指定数据库?
【发布时间】:2014-10-18 20:33:12
【问题描述】:

我们有一个基于 Yii 构建的大型应用程序。

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

我想使用CDbMigrations 和yiic migrate

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

如何指定迁移属于哪个数据库?

这是基本的迁移结构,用于说明。

class do_stuff extends CDbMigration
{
    public function up()
    {
        // create table
    }

    public function down()
    {
        // drop table
    }
}

【问题讨论】:

    标签: php mysql sqlite yii database-migration


    【解决方案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,您可以从中创建要执行的命令。

    【讨论】:

    • 谢谢,当我真正尝试时会接受。忙于其他工作挑战,没时间玩新东西:(
    【解决方案2】:

    您可以使用CDbMigration::setDbConnection() 更改默认值,或覆盖getDbConnection() 方法。这类似于另一个提议的解决方案,但它有一个拼写错误并且它需要是一个公共函数,所以我在此处提供了修复。

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

    protected $dbConnection1;
    public function getDbConnection()
    {
       if (null !== $this->dbConnection1) {
          return $this->dbConnection1;
       }
    
       return $this->dbConnection1 = Yii::app()->getComponent('db1');
    }
    

    【讨论】:

      猜你喜欢
      • 2018-03-04
      • 2016-06-07
      • 2011-12-10
      • 2011-10-05
      • 2014-10-07
      • 1970-01-01
      • 2013-03-06
      • 1970-01-01
      • 2023-03-28
      相关资源
      最近更新 更多