我试图在控制器中使用ClassRegistry :: init('ModelName')或loadModel('ModelName')动态加载模型。
我在database.php配置中定义了两个数据库:
public $default = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'username',
'password' => 'password',
'database' => 'database1',
'prefix' => '',
);
public $database2 = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'same_username',
'password' => 'same_password',
'database' => 'database2',
'prefix' => '',
//'encoding' => 'utf8',
);
我遇到问题的地方是使用Cake能够动态生成模型,从database2正确加载和引用表。存储在database2中的表不会(也不会)与它们关联的“ModelName.php”。
我尝试过以下方法:
// Method 1
$this->FirstTable->setDataSource('database2');
ClassRegistry::init('TableFromSecondDatabase')->find('all');
$data = $this->TableFromSecondDatabase->find('all');
// Method 2
$this->loadModel('TableFromSecondDatabase');
$this->TableFromSecondDatabase->find('all');
这两种方法都给我以下错误:
Error: Table TableFromSecondDatabase for model database 2 was not found in datasource default.
答案 0 :(得分:4)
您可以像这样直接实例化模型:
$model_1 = new Model(array('table' => 'the_table', 'ds' => 'default'));
$model_2 = new Model(array('table' => 'the_table', 'ds' => 'database2'));
或者如果你想创建一个模型来放置一些逻辑,你可以稍后以相同的方式实例化它:
App::uses('YourModel', 'Model');
$model_1 = new YourModel(array('ds' => 'default'));
$model_2 = new YourModel(array('ds' => 'database2'));
答案 1 :(得分:3)
在使用其他数据库的模型中:
public $useDbConfig = 'database2';
它不一定是“动态”,但除非你在两个数据库中都有相同的对象,否则这样可以正常工作。如果您确实需要连接到同一对象的多个数据库,那么您应该阅读How to use multiple databases dynamically for one model in CakePHP