답변:
이것은 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();