0

我有两个带有这些配置文件的数据库

    'db' => require(__DIR__ . '/db.php'),
    'db2' => require(__DIR__ . '/db2.php'),

db.php 文件

return [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;port=**;dbname=**',
'username' => '**',
'password' => '**',
'charset' => 'utf8'];

db2.php 文件

return [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;port=**;dbname=**',
'username' => '**',
'password' => '**',
'charset' => 'utf8'];

当我想在迁移中使用 db2 数据库配置时出现错误

public function init()
{
    $this->db = 'db2';
    parent::init();
}

public function up()
{
    $this->createTable('logs', [
        'id' => $this->primaryKey()->unsigned(),
        'type' => $this->string(8)->notNull(),
        'data' => $this->string(255)->notNull(),
        'created_at' => $this->integer()->notNull()->unsigned(),
    ]);
}

public function down()
{
    $this->dropTable('logs');
}

错误:

异常“yii\base\InvalidConfigException”,消息“无法实例化组件或类“db2”。”

有人尝试对两个数据库使用迁移吗?

4

1 回答 1

1

不要在 init 方法中覆盖您的数据库,而是在属性中执行它:

public $db = 'db2';

public function up()
{
    $this->createTable('logs', [
        'id' => $this->primaryKey()->unsigned(),
        'type' => $this->string(8)->notNull(),
        'data' => $this->string(255)->notNull(),
        'created_at' => $this->integer()->notNull()->unsigned(),
    ]);
}

public function down()
{
    $this->dropTable('logs');
}

更新

我刚刚再次阅读了代码,并且在覆盖 init 方法时您的方式是正确的,但是您是否将配置添加到 console.php 文件中?

'db' => require(__DIR__ . '/db.php'),
'db2' => require(__DIR__ . '/db2.php'),

它们也应该在 console.php 文件中。

于 2017-03-19T10:45:29.157 回答