如何在CakePHP中为一个模型动态使用多个数据库 - 代码日志

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

好的,我的第一个问题被修改了很多次,我选择删除它,并重新配置我的问题。我已经制作了一个小型的测试用例项目,使用不同的型号名称找到适合我的问题的解决方案。

警告:不要将数据库与表混合

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

目前,我正在开发一个具有多个用户的CakePHP项目,每个用户拥有自己的具有多个表的数据库(汽车是其中之一)。现在,我需要先解释一下:

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

> [DATABASE]应用程序(这是该应用程序的主数据库)

> [TABLE]用户
> [TABLE]权限(与此问题无关)

> [DATABASE] app_user1(User.id 1拥有整个数据库)

> [TABLE]汽车(User.id 1全部拥有的表)

> [DATABASE] app_user2(User.id 2拥有整个数据库)

> [TABLE]汽车(由User.id完全拥有的表2)

>等…

我做了一个小图,可能会澄清数据库/表 – 定义及其与模型的关系:

问题!!!

在用户登录之前,我不知道要连接哪个数据库。用户及其数据库是动态创建的,所以我不能使用app / Config / database.php。

所以我目前正在Model和ConnectionManager类上编写一个扩展,以绕过CakePHP的基本数据库行为。所以汽车模型知道要使用哪个数据库。但我只是有一种感觉,这可以做得更容易!

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

有没有更简单的方法呢?

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

This gentleman(Olivier)也有同样的问题! (一年前)He wrote对控制器的小适应!它很小,事实证明,它的工作原理是1.3和2.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;
    }
}

这里是我如何在我的应用程序/ 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社区。

http://stackoverflow.com/questions/13223946/how-to-use-multiple-databases-dynamically-for-one-model-in-cakephp

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:如何在CakePHP中为一个模型动态使用多个数据库