1) 如果需要对Controller级别进行数据库的设置,
那么只要设置$controller->modelClass->useDbConfig = 'your db server'即可。
2) 如果要在Action级别进行数据库的动态选择,麻烦些,需要hack Cake的model类
如下的方式针对读写做了简单的数据库master/slave切换:
class AppModel extends Model {
/**
* Override constructor to dynamically choose database
*
*/
function __construct($id = false, $table = null, $ds = null) {
if(isset($_GET['ds'])) {
$ds = $_GET['ds'];
} else {
if($_SERVER['REQUEST_METHOD']=='POST') {
$ds = 'master';
} else {
$ds = 'default';//slave
}
}
parent::__construct($id, $table, $ds);
}
。。。
解决方案依旧漂亮简洁,通过添加action list可以进一步扩展功能,达到action级别的控制。
代码可维护性很强。
iefreer