web-dev-qa-db-fra.com

Comment configurer plusieurs connexions à la base de données?

Quelqu'un peut-il m'aider à établir une connexion avec plusieurs connexions de bases de données dans Drupal 8? J'ai une base de données sur le même serveur et je veux y accéder avec la valeur par défaut Drupal 8 base de données.

12
Mudassar Ali

Cela se fait de la même manière que dans Drupal 7, vous pouvez ajouter les informations d'identification de la base de données dans votre fichier settings.php.

$databases['default']['default'] = array(
  'database' => 'drupal8',
  'username' => 'username',
  'password' => 'password',
  'prefix' => '',
  'Host' => 'localhost',
  'port' => '3306',
  'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
  'driver' => 'mysql',
);

$databases['external']['default'] = array(
  'database' => 'external',
  'username' => 'username',
  'password' => 'password',
  'prefix' => '',
  'Host' => 'localhost',
  'port' => '3306',
  'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
  'driver' => 'mysql',
);

Vous aurez maintenant deux options de connexion, par défaut et externe. Vous pouvez basculer entre eux en utilisant:

// Switch to external database
\Drupal\Core\Database\Database::setActiveConnection('external');
// Do queries...

// Switch back
\Drupal\Core\Database\Database::setActiveConnection();
13
googletorp

En plus de récupérer une connexion de base de données à la base de données externe à l'aide de Database::getConnection() , vous pouvez également utiliser injection de dépendance dans votre code pour récupérer la connexion en tant que dépendance et déclarez votre connexion dans le fichier YAML des services d'un module:

database.external:
  class: Drupal\Core\Database\Connection
  factory: 'Drupal\Core\Database\Database::getConnection'
  arguments: ['external']

external_database_dependent_service:
  class: Drupal\MODULE\Some\Class\For\A\ServiceUsingTheExternalDatabase
  arguments: ['@database.external']
5
Pierre Buyle

merci beaucoup, @googletorp!

voici un exemple un peu plus complet - mon code pour sélectionner les utilisateurs d'une base de données D7 qui ont créé des nœuds:

\Drupal\Core\Database\Database::setActiveConnection('external');

// Get a connection going
$db = \Drupal\Core\Database\Database::getConnection();

$query = $db->select('users', 'u');
$query->fields('u', array('uid', 'name'));
$query->join('node', 'n', 'n.uid = u.uid');
$query->orderBy('uid');
$users = $query->execute()->fetchAllKeyed();

\Drupal\Core\Database\Database::setActiveConnection();
2
lucoweb