如何解决Yii2迁移灵活的数据库引擎
我有一个使用框架Yii2
的PHP应用程序。我希望此应用程序与某些数据库引擎(如Postgresql,MySql或SQL Server)一起运行。问题是如何迁移它。您知道,例如,Postgresql和SQL Server使用架构作为数据库的子集,但不使用MySQL。
我正在使用带有history
,main
和log
之类模式的Postgresql开发应用程序。现在,我想尝试使用MySQL运行我的应用程序。我该怎么做才能做到这一点?
POSTGRESQL
my_database -> database name
main -> schema
tables
history -> schema
tables
我希望我的迁移可以在不使用控制器/模型/等的情况下运行任何您使用的数据库引擎(PostgreSQL,mssql或mysql)
解决方法
您可以扩展yii\db\Migration
并添加条件,具体取决于您在每种方法中使用的数据库系统的类型。
例如,对于适用于所有方法的默认设置,我扩展了yii\db\Migration
并覆盖了init()
public function init()
{
parent::init();
switch ($this->db->driverName) {
case 'mysql':
$this->tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB';
$this->dbType = 'mysql';
break;
case 'pgsql':
// specifics for pgsql
default:
throw new \RuntimeException('Your database is not supported!');
}
}
那么您的所有迁移都应该扩展这一范围。
因此,通过相同的迁移,您可以对特定的数据库系统执行特定的操作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。