php - 使用 DMZ Data Mapper 连接到多个数据库

标签 php codeigniter codeigniter-datamapper

我正在使用 CodeIgniter 的 DMZ DataMapper ORM。

我确信可以将其配置为连接到多个数据库。我还没有找到任何文档。以前有人这样做过吗?

最佳答案

动态设置数据库参数很容易。这是我使用的:

class DatamapperExt extends Datamapper {

  public function __construct($id, $db) {
    if ($db != null) {         
      // use these params as default - they don't change much. 
      $this->db_params = array_merge(array( 
        'dbdriver'  => 'mysql',
        'pconnect'  => true,
        'db_debug'  => true,
        'cache_on'  => false,
        'char_set'  => 'utf8',
        'cachedir'  => '',
        'dbcollat'  => 'utf8_general_ci',
      ), $db);
    parent::__construct($id);
  }
}

用法:

class YourModel extends DatamapperExt {

}

$db = array(
  'hostname'      => 'database_host',
  'username'      => 'database_username',
  'password'      => 'database_password',
  'database'      => 'database_name',
  'prefix'        => 'CI table_prefix - if any',
);

$your_model_with_diff_db = new YourModel(NULL, $db);
$model_with_id_diff_db   = new YourModel(12, $db);

这就是我这样做的...似乎你必须在构造中指定 db_params 才能使其动态工作,否则 datamapper 会根据现有的数据库设置尝试构造/解析关系等。

如果你的db已经设置好了,并且运行时不需要修改参数,你也可以在config/database.php中创建一个新条目:

$db['other_database'] = array(  
  'hostname'      => 'database_host',
  'username'      => 'database_username',
  'password'      => 'database_password',
  'database'      => 'database_name',
  'prefix'        => 'CI table_prefix - if any',
)

(请注意,我上面的编码风格与 dbs 的标准 CI 不同。)

然后使用:

class YourModel extends DatamapperExt {
   var $db_params = 'other_database';
}

关于php - 使用 DMZ Data Mapper 连接到多个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5448506/

相关文章:

php - Codeigniter - 使用 AJAX 下载 CSV

php - 检查表中是否存在值或处理MySQL的唯一约束异常?

html - 可以改进/缩短以下使用 CodeIgniter 的 SQL 或 HTML 代码以提高可读性吗?

php - 如何在 Codeigniter 的 Datamapper ORM 中嵌套 WHERE 参数?

Codeigniter 3 - 查询生成器 'join' 方法 '!=' 运算符未提供预期输出

php - 如何将当前的 POST 数组保存到 MySQL

javascript - 发出关闭消息框 cookie

javascript - 如何通过一个按钮添加一个或多个表单并通过javascript通过另一个按钮将其删除

php - 使用 jQuery 时出现 "Form is not defined"错误