gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 13:25:38 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com