我有一个应用程序,每个 URL 都有一个唯一的数据库,类似于这个答案:CakePHP - database config based on URL
这很好用,但我还需要在每个数据库上运行一些控制台命令。我想使用参数,所以我会使用这样的东西:
cake consoleCommand databaseConfig
理想情况下,这会将整个应用程序的数据库设置为“databaseConfig”,然后运行“consoleCommand”。我遇到的问题是 DATABASE_CONFIG 类在运行 consoleCommand 之前加载并运行。我当时尝试在控制台中使用 $this->Model->setDataSpource 之类的东西,但此时控制台中似乎也没有 Model 可用。
我玩弄了设置配置设置,只是在访问模型之前查找它,但它不适用于 __construct(),所以我不得不将它绑定到所有 before* 方法中。这对我来说似乎有点混乱:
class AppModel extends Model
{
private function _before() {
$conn = Configure::read('dbConnection');
if(!empty($conn))
$this->setDataSource($conn);
}
public function beforeValidate($options = array()) {
$this->_before();
parent::beforeValidate();
}
public function beforeDelete($bool = true) {
$this->_before();
parent::beforeDelete($bool);
}
public function beforeFind($queryData) {
$this->_before();
parent::beforeFind($queryData);
}
public function beforeSave($options=array()) {
$this->before();
parent::beforeSave($options);
}
}
我很感激对此的任何见解。