9.13. Drupal में डेटाबेस के साथ काम करना
Drupal मॉड्यूल विकसित करते समय डेटाबेस क्वेरी चलाना एक सामान्य प्रक्रिया है। जहाँ भी संभव हो, आपको entityQuery का उपयोग करना चाहिए, लेकिन कभी-कभी अधिक जटिल डेटा प्राप्त करने के लिए SQL क्वेरी की आवश्यकता होती है।
आप इस पेज को बुकमार्क कर सकते हैं ताकि Drupal में MySQL क्वेरी — select, insert, update, delete — को चलाने का त्वरित संदर्भ (cheat sheet) हमेशा आपके पास रहे।
Select
एकल मान (single value) प्राप्त करना:
$query = \Drupal::database()->select('node_field_data', 'n');
$query->addField('n', 'nid');
$query->condition('n.title', 'About Us');
$query->range(0, 1);
$nid = $query->execute()->fetchField();
Array में एंट्री प्राप्त करना:
$query = \Drupal::database()->select('node_field_data', 'n');
$query->fields('n', ['nid', 'title']);
$query->condition('n.type', 'page');
$query->range(0, 1);
$vegetable = $query->execute()->fetchAssoc();
आप ->fetchObject()
, ->fetchAll()
का उपयोग करके परिणाम को object के रूप में भी प्राप्त कर सकते हैं।
LIKE का उपयोग क्वेरी में:
$query = \Drupal::database()->select('node_field_data', 'n');
$query->fields('n', ['nid', 'title']);
$query->condition('n.type', 'page');
$query->condition('n.title', $query->escapeLike('About') . '%', 'LIKE');
$vegetable = $query->execute()->fetchAllKeyed();
JOIN के साथ Select क्वेरी:
$query = \Drupal::database()->select('node_field_data', 'n');
$query->fields('n', ['nid', 'title']);
$query->addField('u', 'name');
$query->join('users_field_data', 'u', 'u.uid = n.uid');
$query->condition('n.type', 'page');
$vegetable = $query->execute()->fetchAllAssoc('nid');
नीचे अन्य डेटाबेस क्वेरीज़ — insert, update, upsert और delete — के उदाहरण दिए गए हैं। ये कस्टम टेबल्स के साथ काम करते समय उपयोगी हो सकते हैं। लेकिन कस्टम टेबल्स का उपयोग करने से पहले दो बार सोचें। बेहतर होगा कि आप Drupal API या contrib मॉड्यूल्स का उपयोग करें। फिर भी, यदि आप डेटाबेस में कस्टम क्वेरी लिखने का निर्णय लेते हैं, तो नीचे उदाहरण देखें:
Insert
$query = \Drupal::database()->insert('flood');
$query->fields([
'event',
'identifier'
]);
$query->values([
'My event',
'My indentifier'
]);
$query->execute();
आप values()
को कई बार कॉल करके एक साथ कई रिकॉर्ड जोड़ सकते हैं।
Update
$query = \Drupal::database()->update('flood');
$query->fields([
'identifier' => 'My new identifier'
]);
$query->condition('event', 'My event');
$query->execute();
Upsert
$query = \Drupal::database()->upsert('flood');
$query->fields([
'fid',
'identifier',
]);
$query->values([
1,
'My indentifier for upsert'
]);
$query->key('fid');
$query->execute();
key()
मेथड उस फ़ील्ड का नाम निर्धारित करने के लिए उपयोग किया जाता है जो मौ