主从自动切换报错[怎么样能不在main.php里定义]


<?php


class ActiveRecord extends CActiveRecord{

	

	

	//保存数据前选择 主 数据库

	function beforeSave(){

		parent::beforeSave();		

		self::$db = 'db';

		return true;

	}

	//读取数据选择 从 数据库

	function beforeFind(){

		parent::beforeSave();		

		self::$db = 'db';

		return true;

	}

	

	//随机选择 读取的数据库

	protected function autoDb(){

		

		

	}

 


}

以上是代码

报错

Fatal error: Call to a member function getSchema() on a non-object

用的是YII1.1同步SVN的。

想实现 写到主库里,还读取是从其他 从库里随机一个库读取

使用如下可以:


<?php


class ActiveRecord extends CActiveRecord{

	

	static $db;

	

	//保存数据前选择 主 数据库

	function beforeSave(){

		parent::beforeSave();		

		self::$db = 'db';

		return true;

	}

	

	//读取数据选择 从 数据库

	function beforeFind(){

		parent::beforeSave();		

		self::$db = 'db';

		return true;

	}

	

	//随机选择 读取的数据库

	protected function autoDb(){

		

		

	}

 


}

是否1.1已内置了动态切换数据库

非常感谢 回复

CActiveRecord::$db要求的是CDbConnection对象,例如Yii::app()->db, Yii::app()->db2。

目前还没有支持动态切换数据库,主要原因是需求不明确。

:rolleyes:

谢谢,直接在main.php里是可以设置的。

但我想


<?php


class ActiveRecord extends CActiveRecord{

	

	static $db;

	

	//保存数据前选择 主 数据库

	function beforeSave(){

		parent::beforeSave();		

		self::$db = Yii::app()->db;

		return true;

	}

	

	//读取数据选择 从 数据库

	function beforeFind(){

		parent::beforeSave();		

		self::$db = self::autoDb();

		return true;

	}

	

	//随机选择 读取的数据库

	protected function autoDb(){		

		$db = array(

			'class' => 'CDbConnection',

			'connectionString' => 'mysql:host=localhost;dbname=openv_read',

			'emulatePrepare' => true,

			'username' => 'test',

			'password' => 'test',

			'tablePrefix'=>'',

			'charset' => 'utf8',

			'emulatePrepare'=>true,

			'schemaCachingDuration'=>true,

		);

		 

		return app()->db2 = $db;

	}

 


}

这样来做。但它说DB2未定义。。

是否只能把内容写到main.php里面?而不能在外面改变其值?