我们在Yii上建立了一个巨大的应用程序。
到目前为止,迁移是通过在phpliteadmin / phpmyadmin中复制粘贴SQL转储来完成的,但这不太方便。
我想CDbMigration
使用yiic migrate
,class do_stuff extends CDbMigration
{
public function up()
{
// create table
}
public function down()
{
// drop table
}
}
。
问题是我们有两个数据库 - 一个用于配置和设置的小sqlite,以及用于存储一些历史记录的大型mysql。
如何指定迁移所属的数据库?
这是基本的迁移结构,仅供参考。
{{1}}
答案 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');
}