Ai đó có thể giúp tôi thiết lập kết nối với nhiều kết nối cơ sở dữ liệu trong Drupal 8 không? Tôi có cơ sở dữ liệu trên cùng một máy chủ và tôi muốn truy cập nó cùng với cơ sở dữ liệu Drupal 8 mặc định.
Ai đó có thể giúp tôi thiết lập kết nối với nhiều kết nối cơ sở dữ liệu trong Drupal 8 không? Tôi có cơ sở dữ liệu trên cùng một máy chủ và tôi muốn truy cập nó cùng với cơ sở dữ liệu Drupal 8 mặc định.
Câu trả lời:
Điều này được thực hiện theo cách tương tự như trong Drupal 7, bạn có thể thêm thông tin đăng nhập cơ sở dữ liệu vào tệp settings.php của mình.
$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',
);
Bây giờ bạn sẽ có hai tùy chọn kết nối, mặc định và bên ngoài. Bạn có thể chuyển đổi giữa chúng bằng cách sử dụng:
// Switch to external database
\Drupal\Core\Database\Database::setActiveConnection('external');
// Do queries...
// Switch back
\Drupal\Core\Database\Database::setActiveConnection();
Database::getConnection('external')
và tránh gây rối với nhà nước toàn cầu.
Ngoài việc truy xuất kết nối cơ sở dữ liệu đến cơ sở dữ liệu bên ngoài bằng cách sử dụng Database::getConnection()
, bạn cũng có thể sử dụng phép nội xạ phụ thuộc trong mã của mình để truy xuất kết nối dưới dạng phụ thuộc và khai báo kết nối của bạn trong tệp dịch vụ YAML của mô-đun:
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']
cảm ơn bạn rất nhiều, @googletorp!
đây là một ví dụ đầy đủ hơn một chút - mã của tôi để chọn người dùng từ cơ sở dữ liệu D7 đã tạo các nút:
\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();