डेटाबेस कनेक्शन ऑब्जेक्ट बनाना
डेटाबेस के साथ इंटरैक्शन डेटाबेस कनेक्शन ऑब्जेक्ट के माध्यम से किया जाना चाहिए। कुछ परिदृश्य हैं जिन्हें थोड़ा ध्यान देने की आवश्यकता है:
1. प्रोसीजरल कोड में, यानी *.module, *.inc या स्क्रिप्ट फ़ाइलों में:
डेटाबेस कनेक्शन ऑब्जेक्ट का एक इंस्टेंस बनाने का सबसे अच्छा तरीका Service Container के माध्यम से है।
उदाहरण:
$database = \Drupal::database();
// या
$database = \Drupal::service('database');
यह एक डेटाबेस कनेक्शन ऑब्जेक्ट देगा, जो settings.php फ़ाइल में डेटाबेस कॉन्फ़िगरेशन के अनुसार डिफ़ॉल्ट मुख्य डेटाबेस से जुड़ने के लिए कॉन्फ़िगर किया गया है।
2. ऐतिहासिक और तकनीकी कारणों से, \Drupal::database() द्वारा लौटाया गया प्रकार \Drupal\Core\Database\Connection है, और इसलिए इसे कभी-कभी $connection कहा जाता है।
3. OOP कोड में:
- कुछ मामलों में डेटाबेस कनेक्शन ऑब्जेक्ट पहले से ही मौजूदा क्लास के सदस्य के रूप में उपलब्ध हो सकता है; उदाहरण के लिए, कई प्लगइन्स और सर्विसेज के पास $this->database (या $this->connection) सदस्य के रूप में डेटाबेस कनेक्शन ऑब्जेक्ट होता है।
- यदि संभव हो, तो DI (Dependency Injection) का उपयोग करें ताकि @database सेवा या $container->get('database') का उपयोग करके डेटाबेस कनेक्शन इंजेक्ट किया जा सके।
- यदि यह संभव न हो (जैसे किसी क्लास के स्टैटिक मेथड में), तो \Drupal::database() का उपयोग करें।
- यदि सर्विसेज़ अभी तक उपलब्ध नहीं हैं, तो \Drupal\Core\Database\Database::getConnection() डेटाबेस कनेक्शन प्राप्त कर सकता है।
- मॉड्यूलर टेस्ट्स में हमारे पास लोडेड कोर या इनबिल्ट कंटेनर नहीं होता। मॉड्यूलर टेस्ट्स को सामान्यतः डेटाबेस का उपयोग नहीं करना चाहिए। किसी मॉड्यूलर टेस्ट को यदि डेटाबेस सर्विस की आवश्यकता है, तो उसे कोर टेस्ट में परिवर्तित किया जाना चाहिए।
- कोर क्लासेस और फंक्शनल टेस्ट्स में हमारे पास $this->container->get('database') होता है। कुछ टेस्ट लेखक देख सकते हैं कि फंक्शनल टेस्ट के दौरान अनुरोध पर टेस्ट क्लास द्वारा संदर्भित कंटेनर मौजूदा कंटेनर के साथ सिंक में नहीं है। इस स्थिति में टेस्ट लेखक $this->rebuildContainer() कॉल कर सकता है और फिर से $this->container->get('database') तक पहुँच सकता है।
अन्य डेटाबेस कनेक्शन का उपयोग करना
यदि आपकी साइट कई डेटाबेस का उपयोग करती है, तो डिफ़ॉल्ट डेटाबेस के अलावा किसी अन्य डेटाबेस पर क्वेरी चलाने के लिए Database::getConnection() का उपयोग करें। उदाहरण:
$connection = \Drupal\Core\Database\Database::getConnection('default', 'other_database');
यह settings.php में परिभाषित डेटाबेस से कनेक्शन सुनिश्चित करेगा, जैसे:
$databases['other_database']['default']