Dynamic change table name in AR

(Sebastianmazur) #1


is it possible to dynamic set table name in AR before I will create object of model?

(Mh) #2

Since tableName() is a function you should be able to return any value you want. The logic for that method depends on your requirements…

(Sebastianmazur) #3

And how to pass parameters to this method?I tried to override constructor but my solution not work.

class Outsite extends CActiveRecord


    private $_dsn;

    private $_username;

    private $_password;

    private $_tablename;


    public function __construct($dsn='',$username='',$password='',$tablename='')









    public function getDbConnection()


        $connection=new CDbConnection($this->_dsn,$this->_username,$this->_password);


        return $connection;




     * Returns the static model of the specified AR class.

     * @return CActiveRecord the static model class


    public static function model($className=__CLASS__)


        return parent::model($className);



     * @return string the associated database table name


    public function tableName()


        return $this->_tablename;



$out=new Outsite($dsn,$username,$password,'user');


(Sebastianmazur) #4

When I comment


also does not work.

(Sanderb) #5

parent::__construct() should be the first call you make, not the last.

(Sebastianmazur) #6

I get error:

Missing argument 2 for Outsite::__construct(), called in E:\www\UPI\framework\db\ar\CActiveRecord.php on line 326 and defined

(Sebastianmazur) #7

This is my stack trace:

#0 E:\www\framework\db\ar\CActiveRecord.php(326): Outsite->__construct()

#1 E:\www\framework\db\ar\CActiveRecord.php(341): model()

#2 E:\www\framework\db\ar\CActiveRecord.php(59): Outsite->getMetaData()

#3 E:\www\project\protected\models\Outsite.php(37): Outsite->__construct()

#4 E:\www\project\protected\controllers\SiteController.php(46): Outsite->__construct()

#5 E:\www\framework\web\actions\CInlineAction.php(32): SiteController->actionIndex()

#6 E:\www\framework\web\CController.php(300): CInlineAction->run()

#7 E:\www\framework\web\CController.php(278): SiteController->runAction()

#8 E:\www\framework\web\CController.php(257): SiteController->runActionWithFilters()

#9 E:\www\framework\web\CWebApplication.php(320): SiteController->run()

#10 E:\www\framework\web\CWebApplication.php(120): CWebApplication->runController()

#11 E:\www\framework\base\CApplication.php(135): CWebApplication->processRequest()

#12 E:\www\project\index.php(11): CWebApplication->run()

(Sebastianmazur) #8

I solved the problem by keeping the data in the user session. The solution may be not elegant but works.

(Giancarloalbanese 74) #9



(Ext Yiiframework Com) #10


I’ve done that in the past though I’ve run into several issues in the framework

I logged this in the bug tracking system and also opened a forum thread on it.

You can track this back throught the old and new tracking system:


Currently I am not using the method for several reasons; one of them is that I do not like changing the framework on each upgrade.

(Ankit Modi) #11