如何最好地在cakephp 2.3中使用两个数据库?

时间:2013-05-16 13:37:18

标签: mongodb cakephp-2.3

我在Cakephp 2.3中创建的应用程序中使用了两个数据库。一个mysql数据库,通常配置,和另一个数据库nosql(MongoDB),我用这种方式例如:

$connection = new Mongo('localhost');
$db = $connection->compras;
return $db->anuncios->insert($dados);
我可以用这种方式吗?   关于安全......,你们认识到使用mongo数据库的那种可能的问题是什么?

1 个答案:

答案 0 :(得分:2)

您需要在app / Config / Core.php文件中设置环境,这意味着您要在哪种模式下使用哪个数据库,即下面的生产,开发,登台等

    if(env('HTTP_HOST')):
      switch (env('HTTP_HOST')) {
   case "example.com":
   case "www.example.com":  
    define('DEVELOPMENT_MODE', false); // Suppose you're using production for Mysql databse 
   break;

   case "development.example.com":
    define('DEVELOPMENT_MODE', true); // Suppose you're using development for MongoDB
   break;

  default:
    define('DEVELOPMENT_MODE', true);
  break;
    }

之后你必须在app / Config / database.php文件中使用DEVELOPMENT_MODE变量,如下所示。

    class DATABASE_CONFIG {
  public $default = array(
    'datasource' => 'Database/Mysql',
    'persistent' => false,
    'host' => 'localhost',
    'login' => 'db_username',
    'password' => 'db_password',
    'database' => 'db_name',
    //'prefix' => '',
    'encoding' => 'utf8',
  );
  var $mongo = array(
    'datasource' => 'mongodb.mongodbSource',
    'persistent' => false,
    'host' => 'localhost',
    'login' => 'db_username',
    'password' => 'db_password',
    'database' => 'db_name',
    //'prefix' => '',
    'encoding' => 'utf8',
  );

  public function __construct() {
    if (DEVELOPMENT_MODE) {
        $this->default = $this->mongo;
    } else {
        $this->default = $this->default;
    }
  }
    }

以上所有逻辑用于配置设置以在整个应用程序中使用。

现在,下面的代码是将Model连接到mongoDB。

    class Test extends AppModel {
      var $name = 'test';
      var $primaryKey = 'id';
      var $useDbConfig = 'mongo'; // setup the mongodb datasource

      // Now is model is connected with mongoDB only....
    }