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 base de données Drupal 8 par défaut.
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 base de données Drupal 8 par défaut.
Réponses:
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();
Database::getConnection('external')
et évitez de jouer avec l'état global.
En plus de récupérer une connexion de base de données à la base de données externe à l'aide Database::getConnection()
, vous pouvez également utiliser l' injection de dépendance dans votre code pour récupérer la connexion en tant que dépendance et déclarer 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']
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();