Yii有没有统一增加表前缀的功能

这个功能主要用在这里,就是当发现要使用的库中有同样的表名的时候,又不想改动已存在的系统的表名,也不想改动要加入的系统的表名。如果能增加一个表前缀的功能,会解决这个需求。

我是自己写继承类来实现表前缀功能的

首先在config文件中添加:



<?php


return array(


    "params" => array(


        "dbPrefix" => "e_",	


    ),


);


?>


然后添加类继承CActiveRecord:



<?php


class EActiveRecord extends CActiveRecord {


	


	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);


	}	


}


?>


如果想使用rbac功能的话,还需要写类继承CDbAuthManager:



<?php


class EDbAuthManager 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();


        


    }


}


?>


这个方法不错啊!

Quote

这个方法不错啊!

太好了,我正在想加表前缀的问题,这个方法不错,能不能加到Yii Core里面?

Quote

我是自己写继承类来实现表前缀功能的

首先在config文件中添加:

你好,我是yii初学者,请问写好的类继承文件如何放置?

可以放在protected/components

Quote

可以放在protected/components

文件名称就是EActiveRecord.php吗?config里面还需要设置别的参数吗?除了

"params" => array(

        "dbPrefix" => "e_",

    ),

以外

Quote

Quote

可以放在protected/components

文件名称就是EActiveRecord.php吗?config里面还需要设置别的参数吗?除了

"params" => array(

        "dbPrefix" => "e_",

    ),

以外

不错,我就借用了这个方法,你只需要在configuration中定义了:

就可以用了,当然所有需要前缀的表都需要继承自EActiveRecord类。

谢谢各位了啊,还是期待强哥把表前缀发布在以后的版本中。 :)

确实不错~

表前缀在1.1已经支持了:http://www.yiiframework.com/doc/guide/database.dao#using-table-prefix

Good job!

谢谢qiang,之前跟你讨论过这个问题,好多空间商都只提供一个数据库。现在能有官方解决方式就太好了

希望yiic 工具也能直接使用

另外,希望yii能够在1.1出一个比较稳定而精简的版本。然后暂时多花费心思在文档的完善以及初学者的培训上。因为只有更多的学习

者能够完整的掌握yii的特性之后,才能从项目开发中提出更为完整的需求和改进建议。

现在在文档部分由的地方还不够完善。许多功能和使用方法没有标准的解决方案。希望在你之前提到的cms例子中有所体现。