Yii framework 默认情况下并没有为数据表设置 prefix 的功能。 根据作者 qiang 的说话是这个功能并不是必须的,需要的用户可以自己建立扩展。确实是这样,在 Yii framework 完全 OO 的结构下,我们可以很方便的来实现表前缀扩展功能。接下来让我们看看如何来实现:
首先在我们的配置文件中 /wwwroot/protected/config/main.php 中添加下面的代码:
<?php
return array(
"params" => array(
"dbPrefix" => "e_",
),
);
?>
这串代码中,我们定义了一个表前缀的名为 dbPrefix 的参数。
接着就要添加我们 CActiveRecord 的继承类了,以下的代码中我们建立了一个 MyActiveRecord 的继承类, 可以把它存放在 /wwwroot/protected/extensions/ 目录中:
<?php
class EActiveRecord extends MyActiveRecord {
public $prefix;
public function __construct($attributes = array(), $scenario = "") {
parent::__construct($attributes, $scenario);
$this->prefix = Yii::app()->params->dbPrefix;
}
public function tableName() {
// return table name with prefix
return $this->prefix . get_class($this);
}
}
?>
在我们以后的项目中我们的 Model 都用 MyActiveRecord 代替原来的 CActiveRecord 就可以使用表前缀了。
如果我们需要使用 RBAC 功能,我们还可以继承 CDbAuthManager:
<?php
class MyDbAuthManager extends CDbAuthManager {
public function init() {
$prefix = Yii::app()->params->dbPrefix;
$this->itemTable = $prefix . $this->itemTable;
$this->itemChildTable = $prefix . $this->itemChildTable;
$this->assignmentTable = $prefix . $this->assignmentTable;
parent::init();
}
}
?>