好的,我的第一个问题被修改了很多次,以至于我选择删除它并重新格式化我的问题。我已经制作了一个带有不同型号名称的小型测试用例项目,以找到解决我的问题的合适方法。
警告:请勿将数据库与表混淆
动机:我将用户数据分为多个数据库,以解决法律和性能问题。
目前,我正在开发一个CakePHP项目,该项目具有多个User,每个项目User都有其自己的数据库,其中包含多个表(cars是表之一)。现在,我需要先解释一下:
每个人User都有自己的数据库(不是表,数据库),因此数据库名称如下。
[DATABASE] app(这是应用程序的主数据库) [表] users [TABLE] permissions(与此问题无关) [数据库] app_user1(User.id1拥有整个数据库) [TABLE] cars(由1 完全拥有的表User.id) [DATABASE] app_user2(User.id2拥有整个数据库) [TABLE] cars(由2 完全拥有的表User.id) 等等... 我做了一张小图,可以阐明数据库 / 表的定义及其与模型的关系:
如何在CakePHP中为一个模型动态使用多个数据库
问题!!!
在动态创建登录及其数据库之前,我不知道要连接到哪个数据库。UserUserapp/Config/database.php
因此,我目前在Model和ConnectionManager类上编写扩展,以绕过CakePHP的基本数据库行为。因此,Car模型知道要使用哪个数据库。但我只是觉得这可以更轻松地完成!
所以我想这全都归结为一个问题:
有更简单的方法吗?
感谢所有花时间和精力阅读和理解我的问题的人!
无论如何,这是我的最终解决方案,我将其放入app/Model/AppModel.php:
class AppModel extends Model { /** * Connects to specified database * * @param String name of different database to connect with. * @param String name of existing datasource * @return boolean true on success, false on failure * @access public */ public function setDatabase($database, $datasource = 'default') { $nds = $datasource . '_' . $database;
$db = &ConnectionManager::getDataSource($datasource);
$db->setConfig(array(
'name' => $nds,
'database' => $database,
'persistent' => false
));
if ( $ds = ConnectionManager::create($nds, $db->config) ) {
$this->useDbConfig = $nds;
$this->cacheQueries = false;
return true;
}
return false;
}
} 这就是我在我中使用它的方式app/Controller/CarsController.php:
class CarsController extends AppController { public function index() { $this->Car->setDatabase('cake_sandbox_client3');
$cars = $this->Car->find('all');
$this->set('cars', $cars);
}
} 我敢打赌,我不是这个问题的第一个或最后一个。所以我真的希望这些信息能找到人们和CakePHP社区。来源:stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。