What would you do if you want/need to have a different than the main database connection in an module's models?
Let's say we create a module with name test under the protected/modules/ folder.
In your config file you can declare a module like:
'modules'=>array(•••••• 'test'=>array( 'db'=>array( 'class'=>'CDbConnection', 'connectionString'=>'sqlite:'.dirname(__FILE__).'/../modules/bliig/data/blog.db', ), ),
Important: The 'class'=>'CDbConnection' is required, for this simple implementation.
In your TestModule.php file ( the class that extends the CModule ) under the protected/modules/test
folder, declare a public property named db.
class TestModule extends CModule { public $db; ... }
Then you have to simple change the CActiveRecord class your module's models extends to EModuleActiveRecord
class EModuleActiveRecord extends CActiveRecord { public function getDbConnection() { $db = Yii::app()->controller->module->db; return Yii::createComponent($db); } }
In this scenario we had a module that we wanted to change database for, but the extension of the CActiveRecord and the
override of the getDdConnection() is common general a common case.
Make sure you import the EModuleActiveRecord. If you have generated the module with gii, just add file under the
components or models folder.
Total 1 comment
Thanks a lot. It was very usefull for me.
Roberto
Leave a comment
Please login to leave your comment.