php - CakePHP - 使用不同的数据源动态加载模型

标签 php cakephp cakephp-2.0 cakephp-2.1 cakephp-2.3

我尝试在 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/

相关文章:

cakephp - CakePHP2 中的多态关联

mysql - cakephp 消息系统方案/模型/ Controller 最佳实践?

php - CakePHP 2.0 CakeLog 限制日志大小

pagination - 如何在 cakephp2 中将分页设置为(显示更多)按钮?

php - 石头剪刀布蜥蜴 Spock 在 PHP 中

php - 无法从站点的子目录加载 MYSQL 驱动程序,可以从主目录加载

mysql - 使用 cakephp 和 mysql 进行连接的 OR 条件

php - 覆盖 Magento Action

php - Doctrine2错误: Expected format: Y-m-d

php - CakePHP 缓存::清除不工作