我有一个 Yii 模型,它将使用(稍后)多个数据库,并且表前缀将基于代码。
例如:
AMI_tablename、BMI_AMI_tablename 等
这些所有表都是相同的,但在不同的数据库中。
我想知道如何在运行时向 Yii 模型提供动态表名?
我尝试使用 setter 函数,但父类 CActiveRecord 给出了错误,因为它没有从子模型类中获取值。
所以这是我的模型代码(只有我有问题的部分)
class RevShareModel extends CActiveRecord
{
public $prefix;
public static function model($className=__CLASS__)
{
return parent::model($className);
}
/**
* @return string the associated database table name
*/
public function tableName()
{
return $this->prefix . '_revshare_model';
}
现在在我的控制器的某个地方
$obj = RevShareModel::model();
$obj->prefix ="BMI";
$obj->tableName();
$obj->findByPk(1);
exit;
但我得到的错误是:
CDbException
The table "_revshare_model" for active record class "RevShareModel" cannot be found in the database.
C:\wamp\www\framework\db\ar\CActiveRecord.php(2264)
似乎当 CActiveRecord 调用 tableName() 方法时它没有得到 $prefix。