Cơ sở dữ liệu::setActiveConnection()
chỉ đặt làm kết nối đang hoạt động, một kết nối được xác định trong tệp settings.php hoặc được thêm từ cuộc gọi trước đó vào Cơ sở dữ liệu::addConnectionInfo()
.
Mã chính xác sẽ là mã sau đây.
$postgis_database = [
'cơ sở dữ liệu' => $drugis_postgis_connection->getdatabase(),
'tên người dùng' => $drugis_postgis_connection->getusername(),
'mật khẩu' => $drugis_postgis_connection->getpassword(),
'máy chủ lưu trữ' => $drugis_postgis_connection->gethost(),
'trình điều khiển' => 'pssql',
];
// $key $mục tiêu
Cơ sở dữ liệu::addConnectionInfo('postgis','default', $postgis_database);
// $mục tiêu $key
Cơ sở dữ liệu::setActiveConnection('default', 'postgis');
Lưu ý thứ tự tham số trong hai lần gọi phương thức cuối cùng. Cũng lưu ý thứ tự chỉ mục mảng được sử dụng trong cơ sở dữ liệu $
mảng được đặt trong tệp settings.php.
// $key $mục tiêu
$databases['default']['default'] = [
'cơ sở dữ liệu' => 'tên cơ sở dữ liệu',
'tên người dùng' => 'tên người dùng sql',
'mật khẩu' => 'mật khẩu sql',
'máy chủ' => 'máy chủ cục bộ',
'cổng' => '3306',
'trình điều khiển' => 'mysql',
'tiền tố' => '',
'đối chiếu' => 'utf8mb4_General_ci',
];
Các kết nối được thêm vào với Cơ sở dữ liệu::addConnectionInfo()
không vĩnh viễn; chúng được thêm vào thuộc tính tĩnh của cơ sở dữ liệu
lớp. Tất cả các hàm/phương thức muốn sử dụng kết nối được xác định trong $postgis_database
cần thực thi mã tôi đã trình bày trước khi truy vấn cơ sở dữ liệu hoặc lưu các giá trị trong cơ sở dữ liệu.
Có lẽ tốt hơn là thêm các kết nối bổ sung trong cài đặt.
Một lỗi cần tránh là gọi các hàm Drupal truy vấn một bảng cơ sở dữ liệu Drupal cụ thể sau khi gọi Cơ sở dữ liệu::setActiveConnection('default', 'postgis')
. Ví dụ, gọi taxonomy_term_load_multiple_by_name()
sau đó Cơ sở dữ liệu::setActiveConnection('default', 'postgis')
sẽ không hoạt động, ngoại trừ trường hợp cơ sở dữ liệu postgis/mặc định chứa một bản sao của các bảng được sử dụng từ Drupal. (Thông thường, đó không phải là trường hợp, vì một mô-đun sử dụng cơ sở dữ liệu khác sẽ không tạo bản sao của các bảng mà Drupal muốn tìm trong cơ sở dữ liệu đó.)
Trước khi gọi các chức năng như taxonomy_term_load_multiple_by_name()
, mã nên gọi Cơ sở dữ liệu::setActiveConnection()
, khôi phục kết nối đang hoạt động về kết nối mặc định được sử dụng bởi Drupal, dành cho cơ sở dữ liệu chứa tất cả các bảng được sử dụng từ Drupal.