使用多个相同配置的Cdbconnection访问同一个数据库是否会有问题?

要做个功能,根据域名不同访问,对不同的模块设置不同的table_prefix(在做多语言版本的时候,cms模块要根据语言版本不同切换数据,admin,user,mail,fileserver等模块不动。)。

爬了下CActiveRecord,CDbConnection,CDBscheme的代码,发现方法有几个。

1.把每个model的getTableName重写一下。这个对我而言觉得太丑了。

2.继承并重写CActiveRecord的两个与tablename相关的代码。依然绝对太丑,特别是构建函数 __construct。

3.重置getDbConnection,根据不同模块去的不同的DbConnection。

感觉3相对最靠谱些。

但是看DbConection里,每个实例都封装了一个pdo实例。

那是否会在多个Dbconection操作数据库的时候出问题呢?

如果模块边界十分清晰 并且不存在跨模块操作(从不同的模块里调用另一个模块的某个模型) 表前缀 可以在xxxModule 的init方法中重写下 Yii::app()->db->tablePrefix = ‘anotherPrefix’;

tablePrefix

下载init里肯定不行。

我每个模块下的helper/model都会有个getModule方法,自动载入模块的。

想了下,这样做是有问题的。

因为存在跨模块的关系

比如 cms对应的作者。

所以还是只能在tablename里动脑筋了