我的yii2应用程序应该允许客户使用mysql或postgresql作为数据库后端。所以我需要为这两个数据库编写代码。
我开始支持mysql,需要删除mysql特定的代码,例如在迁移中:
public function up() {
$this->execute('ALTER SCHEMA DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci');
$this->execute('ALTER SCHEMA CHARACTER SET utf8 COLLATE utf8_general_ci');
$this->createTable('user', [
'id' => $this->primaryKey(),
...
],
'CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE=InnoDB'
);
}
如何重写这段代码?
有没有解决这个问题的回购?mysql和postgresql兼容性的最佳实践是什么?
2条答案
按热度按时间lg40wkob1#
如果我正确理解您所说的编写迁移,它可以根据当前选定的或目标数据库处理特定于db的关键字或函数,那么您可能需要为迁移创建自己的逻辑来支持它。
我使用下面的类作为基本迁移类,并扩展从这个类到
tableOptions
删除列约束。您可以根据需要对其进行升级并添加必要的操作/功能。但它可以创建逻辑来实现你的要求。fjaof16o2#
我对postgre不是很熟悉,但是从app-advanced中的基本迁移来看,你可以查看
driverName
并在此基础上创建不同的逻辑。迁移文件