gpt4 book ai didi

php - 如何在 CakePHP 中为一个模型动态使用多个数据库

转载 作者:IT老高 更新时间:2023-10-28 23:58:55 25 4
gpt4 key购买 nike

好的,我的第一个问题被修改了很多次,所以我选择删除它并重新提出我的问题。我制作了一个具有不同型号名称的小型测试用例项目,以便为我的问题找到合适的解决方案。

警告:不要将数据库表格

混为一谈

动机:出于法律和性能问题,我将用户数据分成多个数据库

目前我正在开发一个 CakePHP 项目,该项目有多个 User,每个 User 都有自己的 数据库 有多个 tables(carstables 之一)。现在,我需要先解释一下:

每个User都有自己的database(不是表,是database),所以数据库名称如下。

  • [DATABASE] app(这是应用程序的主数据库)
    • [TABLE] 用户
    • [TABLE] 权限(与此问题无关)
  • [DATABASE] app_user1(User.id 1 拥有整个 数据库)
    • [TABLE] cars(User.id 1 完全拥有的table)
  • [DATABASE] app_user2(User.id 2 拥有整个数据库)
    • [TABLE] cars(table 完全由 User.id 2 拥有)
  • 等等……

我画了一张小图,可以阐明 database/table -定义及其与模型的关系:

How to use multiple databases dynamically for one model in CakePHP

问题!!!

User 登录之前,我不知道要连接到哪个数据库User 和他们的数据库 是动态创建的,所以我不能使用 app/Config/database.php

所以我目前正在为 ModelConnectionManager 类编写一个扩展,以绕过 CakePHP 的基本数据库行为。所以 Car 模型知道要使用哪个 database。但我只是觉得这可以做得更容易!

所以我想这一切都归结为一个问题:

有更简单的方法吗?!

感谢任何愿意花时间和精力阅读和理解我的问题的人!

最佳答案

This gentleman ( Olivier ) 有同样的问题! (一年前)He wrote Controller 的小改动!它非常小,事实证明,它适用于 1.32.x

无论如何,这是我的最终解决方案,我将其放入 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 社区。

关于php - 如何在 CakePHP 中为一个模型动态使用多个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13223946/

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