RedBeanPHP一直是我比较喜欢的一个PHP ORM。在进行一些数据库的转换时,我一般都会首选使用它。

在最近使用时,数据库长时间连接会造成超时,RedBeanPHP 没有提供 reconnect,重新setup和addDatabase均会报错。

从源码中发现数据库连接保持在 \RedBeanPHP\Facadea::$toolboxes 中,发现这个变量是public的。

直接unset掉,重新连接,大致的代码是这样的:

	
public function reConnect() {
	unset(Facade::$toolboxes['default']);
	unset(Facade::$toolboxes['ugc']);
	unset(Facade::$toolboxes['dealmoon']);

	R::setup(getenv("DB_DSN"), getenv("DB_USER"), getenv("DB_PASS"));
	R::addDatabase( 'ugc', getenv("UGC_DSN"), getenv("UGC_DB_USER"), getenv("UGC_DB_PASS"));
	R::addDatabase( 'dealmoon', getenv("DEALMOON_DSN"), getenv("DEALMOON_DB_USER"), getenv("DEALMOON_DB_PASS"));
}