我尝试在 Controller 中使用 ClassRegistry::init('ModelName') 或 loadModel('ModelName') 动态加载模型。
我在我的database.php配置中定义了两个数据库:
配置/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 中的表没有(也不会)有与之关联的“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.
最佳答案
您可以像这样直接实例化模型:
$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'));
关于php - CakePHP - 使用不同的数据源动态加载模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22514836/