क्या कोई मुझे Drupal 8 में कई डेटाबेस कनेक्शन के साथ कनेक्शन स्थापित करने में मदद कर सकता है? मेरे पास एक ही सर्वर पर डेटाबेस है और मैं इसे डिफ़ॉल्ट Drupal 8 डेटाबेस के साथ एक्सेस करना चाहता हूं।
क्या कोई मुझे Drupal 8 में कई डेटाबेस कनेक्शन के साथ कनेक्शन स्थापित करने में मदद कर सकता है? मेरे पास एक ही सर्वर पर डेटाबेस है और मैं इसे डिफ़ॉल्ट Drupal 8 डेटाबेस के साथ एक्सेस करना चाहता हूं।
जवाबों:
यह उसी तरह से किया जाता है जैसे कि ड्रुपल 7 में, आप अपनी सेटिंग्स में डेटाबेस क्रेडेंशियल्स जोड़ सकते हैं। फाइल।
$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();