सामान्य अवधारणाएँ
Drupal का डेटाबेस लेयर PHP की PDO लाइब्रेरी के ऊपर बनाया गया है। PDO विभिन्न डेटाबेस तक पहुँचने के लिए एकीकृत ऑब्जेक्ट-ओरिएंटेड API प्रदान करता है, लेकिन यह अलग-अलग डेटाबेस में उपयोग किए जाने वाले SQL डायलैक्ट्स के लिए एब्स्ट्रैक्शन प्रदान नहीं करता।
ड्राइवर्स
चूँकि अलग-अलग डेटाबेस अलग-अलग प्रकार की इंटरैक्शन की आवश्यकता रखते हैं, Drupal का डेटाबेस लेयर हर डेटाबेस टाइप के लिए एक ड्राइवर की मांग करता है। ड्राइवर कई फ़ाइलों से मिलकर बनता है, जो include/database/driver में स्थित होते हैं, जहाँ driver एक स्ट्रिंग होती है जो उस ड्राइवर के लिए यूनिक कुंजी को दर्शाती है। अधिकांश मामलों में ड्राइवर की कुंजी डेटाबेस के नाम का लोअरकेस रूप होती है, जैसे "mysql", "pgsql" या "mycustomdriver"।
हर ड्राइवर कई क्लासेस से बना होता है, जो डेटाबेस बेस सिस्टम की पैरेंट क्लासेस से डेरिव किए जाते हैं। ड्राइवर-विशिष्ट क्लासेस आवश्यक किसी भी व्यवहार को ओवरराइड कर सकते हैं ताकि उस डेटाबेस टाइप को सही ढंग से सपोर्ट किया जा सके। ड्राइवर-विशिष्ट क्लासेस का नाम हमेशा उनके पैरेंट क्लास के नाम के साथ, उसके बाद अंडरस्कोर और फिर ड्राइवर के नाम के साथ होता है। उदाहरण के लिए, MySQL के लिए InsertQuery का नाम होगा InsertQuery_mysql।
कनेक्शंस
कनेक्शन – यह DatabaseConnection क्लास का ऑब्जेक्ट है, जो PDO क्लास से इनहेरिट करता है। Drupal जिस भी डेटाबेस से कनेक्ट होता है, उसके साथ एक कनेक्शन ऑब्जेक्ट जुड़ा होता है। इस कनेक्शन ऑब्जेक्ट को प्रत्येक ड्राइवर के लिए सबक्लास किया जाना चाहिए।
कनेक्शन ऑब्जेक्ट तक पहुँचने (और आवश्यकता होने पर खोलने) के लिए उपयोग करें:
$database = \Drupal::database();
// या
$database = \Drupal::service('database');
यदि सर्विसेज अभी उपलब्ध नहीं हैं, तो \Drupal\Core\Database\Database::getConnection() डेटाबेस कनेक्शन प्राप्त कर सकता है।
कनेक्शन कुंजी और target के बारे में अधिक जानकारी के लिए देखें डेटाबेस कॉन्फ़िगरेशन डॉक्यूमेंटेशन पेज।
वर्तमान सक्रिय कनेक्शन तक पहुँचने के लिए उपयोग करें:
$conn = \Drupal\Core\Database\Database::getConnection();
यह सक्रिय कनेक्शन का डिफ़ॉल्ट target प्राप्त करेगा।
ध्यान दें कि अधिकांश मामलों में आपको सीधे कनेक्शन ऑब्जेक्ट की आवश्यकता नहीं होगी। आम तौर पर प्रोसिजरल रैपर्स यह काम आपके लिए कर देते हैं। केवल उसी स्थिति में आपको सीधे कनेक्शन ऑब्जेक्ट की ज़रूरत होगी जब आप कई डेटाबेस के साथ जटिल कार्य कर रहे हों और आप सक्रिय डेटाबेस को बदलना नहीं चाहते।
सक्रिय कनेक्शन सेट करने के लिए उपयोग करें:
$conn = \Drupal\Core\Database\Database::setActiveConnection('external');
कनेक्शन कुंजियों और targets की विस्तृत जानकारी के लिए अगला अनुभाग देखें: डेटाबेस कॉन्फ़िगरेशन।
क्वेरीज़
क्वेरी – यह SQL स्टेटमेंट है, जिसे डेटाबेस कनेक्शन पर भेजा जाएगा। डेटाबेस सिस्टम छह प्रकार की क्वेरीज़ सपोर्ट करता है: स्टैटिक, डायनामिक, insert, update, delete और merge। कुछ क्वेरीज़ SQL स्ट्रिंग टेम्प्लेट (prepared statements) के रूप में लिखी जाती हैं, जबकि अन्य ऑब्जेक्ट-ओरिएंटेड क्वेरी बिल्डर्स का उपयोग करती हैं। "Query object" से तात्पर्य विभिन्न प्रकार की क्वेरीज़ में से किसी एक के क्वेरी बिल्डर के इंस्टेंस से है।
स्टेटमेंट्स
स्टेटमेंट ऑब्जेक्ट SELECT क्वेरी का परिणाम होता है। इसका प्रकार हमेशा DatabaseStatement या उसका कोई सबक्लास होता है। DatabaseStatement क्लास PDOStatement क्लास को एक्सटेंड करता है।
Drupal सभी क्वेरीज़ के लिए prepared statements का उपयोग करता है। Prepared statement – यह एक क्वेरी टेम्प्लेट है, जिसमें मान डालकर इसे execute किया जाता है। इसे SQL फ़ंक्शन के समान समझें, जिसे फिर पैरामीटर्स के साथ कॉल किया जाता है।
सामान्य PDO में आपको स्टेटमेंट ऑब्जेक्ट को स्पष्ट रूप से तैयार करना पड़ता है और फिर उसे प्लेसहोल्डर्स से बंधे मानों के साथ execute करना पड़ता है। उसके बाद स्टेटमेंट को रिज़ल्ट सेट के रूप में iterate किया जा सकता है। वास्तव में स्टेटमेंट और रिज़ल्ट सेट पर्यायवाची होते हैं, लेकिन केवल तब जब स्टेटमेंट execute हो चुका हो।
Drupal prepared statement को सीधे उजागर नहीं करता। इसके बजाय, मॉड्यूल डेवलपर क्वेरी चलाने के लिए क्वेरी ऑब्जेक्ट या SQL स्ट्रिंग का उपयोग करता है, और उस क्वेरी का स्टेटमेंट ऑब्जेक्ट रिटर्न होता है। इसलिए "स्टेटमेंट ऑब्जेक्ट" और "रिज़ल्ट सेट ऑब्जेक्ट" शब्द लगभग समानार्थी हैं।