Подключение к нескольким базам данных с помощью DMZ DataMapper - PullRequest
2 голосов
/ 27 марта 2011

Я использую DMZ DataMapper ORM для CodeIgniter.

Я уверен, что его можно настроить для подключения к нескольким базам данных.Я еще не нашел никакой документации.Кто-нибудь делал это раньше?

Ответы [ 3 ]

2 голосов
/ 19 октября 2012

Спасибо за вашу идею, инди.

в приложении / config / database.php

$db['other_database'] = array(
'hostname' => 'your_host_name',
'username' => 'your_user_name',
'password' => 'your_paasword',
'database' => 'other_database_name',
'prefix' => '',
'dbdriver' => 'mysql',
'pconnect' => true,
'db_debug' => true,
'cache_on' => false,
'char_set' => 'utf8',
'cachedir' => '',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'autoinit' => FALSE,
'stricton' => FALSE,

);

класс Your_new_class расширяет Datamapper {

public $db_params = 'other_database';

}

1 голос
/ 14 июня 2011

Легко установить параметры БД динамически. Вот что я использую:

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',
)

(Обратите внимание, что мой стиль кодирования выше отличается от стандартного CI для dbs.)

Затем используйте с:

class YourModel extends DatamapperExt {
   var $db_params = 'other_database';
}
0 голосов
/ 28 марта 2011

Решение простое:

Создайте другую конфигурацию базы данных в database.php и добавьте

var $db_params = 'name_of_other_database';

к модели.

...