Baza de date::setActiveConnection()
doar setează ca conexiune activă o conexiune definită în fișierul settings.php sau adăugată dintr-un apel anterior la Baza de date::addConnectionInfo()
.
Codul corect ar fi următorul.
$postgis_database = [
'database' => $drugis_postgis_connection->getdatabase(),
'username' => $drugis_postgis_connection->getusername(),
'parolă' => $drugis_postgis_connection->getpassword(),
'gazdă' => $drugis_postgis_connection->gethost(),
'driver' => 'pgsql',
];
// $key $target
Database::addConnectionInfo('postgis','default', $postgis_database);
// $target $key
Database::setActiveConnection('default', 'postgis');
Observați ordinea parametrilor în ultimele două apeluri de metodă. Observați, de asemenea, ordinea indexului matricei folosită în $bază de date
matrice setată în fișierul settings.php.
// $key $target
$databases['default']['default'] = [
'database' => 'databasename',
'username' => 'sqlusername',
'parolă' => 'parolă sql',
'host' => 'localhost',
'port' => '3306',
'driver' => 'mysql',
'prefix' => ''',
'colation' => 'utf8mb4_general_ci',
];
Conexiunile adăugate cu Baza de date::addConnectionInfo()
nu sunt permanente; se adaugă la proprietatea statică a Bază de date
clasă. Toate funcțiile/metodele care doresc să utilizeze conexiunea definită în $postgis_database
trebuie să execute codul pe care l-am arătat înainte de a interoga baza de date sau de a salva valori în baza de date.
Probabil că este mai bine să adăugați conexiunile suplimentare în setări.
O eroare de evitat este apelarea funcțiilor Drupal care interogează un anumit tabel al bazei de date Drupal după apel Database::setActiveConnection('default', 'postgis')
. De exemplu, a suna taxonomy_term_load_multiple_by_name()
după Database::setActiveConnection('default', 'postgis')
nu va funcționa, cu excepția cazului în care baza de date postgis/default conține o copie a tabelelor utilizate din Drupal. (De obicei, acesta nu este cazul, deoarece un modul care utilizează o altă bază de date nu va face o copie a tabelelor pe care Drupal se așteaptă să le găsească în acea bază de date.)
Înainte de a apela funcții precum taxonomy_term_load_multiple_by_name()
, codul ar trebui să sune Baza de date::setActiveConnection()
, care restabilește conexiunea activă la cea implicită utilizată de Drupal, care este pentru o bază de date care conține toate tabelele utilizate din Drupal.