Bookmark and Share

Lee's 程序人生

HTML CSS Javascript XML AJAX ATLAS C# C++ 数据结构 软件工程 设计模式 asp.net Java 数字图象处理 Sql 数据库
  博客园  :: 首页  :: 新随笔  :: 联系 :: 管理

Yii Framework: 为 ActiveReord 添加表前缀

Posted on 2010-02-24 21:55  analyzer  阅读(1507)  评论(0编辑  收藏  举报

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();
 
    }
}
?>

我要啦免费统计