Чи може хто-небудь допомогти мені встановити з'єднання з підключенням до декількох баз даних в Drupal 8? У мене є база даних на тому ж сервері, і я хочу отримати доступ до неї разом із базою даних Drupal 8 за замовчуванням.
Чи може хто-небудь допомогти мені встановити з'єднання з підключенням до декількох баз даних в Drupal 8? У мене є база даних на тому ж сервері, і я хочу отримати доступ до неї разом із базою даних Drupal 8 за замовчуванням.
Відповіді:
Це робиться так само, як і в Drupal 7, ви можете додати облікові дані бази у файл 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',
);
Тепер у вас буде два варіанти підключення, типовий і зовнішній. Ви можете перемикатися між ними за допомогою:
// Switch to external database
\Drupal\Core\Database\Database::setActiveConnection('external');
// Do queries...
// Switch back
\Drupal\Core\Database\Database::setActiveConnection();
Database::getConnection('external')
та уникайте возитися з глобальною державою.
На додаток до завантаження підключення бази даних до зовнішньої бази даних за допомогою Database::getConnection()
, ви також можете використовувати введення коду у свій код, щоб отримати з'єднання як залежність та оголосити своє з'єднання у файлі YAML служби модуля:
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']
велике дякую, @googletorp!
ось трохи більш повний приклад - мій код для вибору користувачів із бази даних D7, які створили вузли:
\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();