9.11.2. प्रोग्राम के माध्यम से एंटिटी जोड़ना, अपडेट करना और हटाना
Drupal में एंटिटीज़ (Entities) के साथ काम करने की प्रक्रिया एकीकृत (unified) है, और सभी CRUD ऑपरेशन्स (Create, Read, Update, Delete) सभी एंटिटीज़ के लिए एक जैसी होती हैं। इस लेख में हम सीखेंगे कि कस्टम कोड में एंटिटीज़ के साथ कैसे काम किया जाए।
पहले कुछ सरल उदाहरण देखते हैं।
प्रोग्राम के माध्यम से नोड (Node) बनाना
use \Drupal\node\Entity\Node;
$node = Node::create([
'type' => 'article',
'title' => 'Druplicon test',
]);
$node->save();
किसी नोड को बनाने के लिए, आपको सभी आवश्यक फ़ील्ड्स को भरना होता है — डिफ़ॉल्ट रूप से केवल Title फ़ील्ड आवश्यक होती है। आप नोड बनने के बाद उसके ऑब्जेक्ट तक भी पहुँच सकते हैं:
$node = Node::create([
'type' => 'article',
'title' => 'Druplicon test',
]);
$node->field_text->value = 'Simple text';
$node->save();
create()
मेथड Node.php
क्लास में मौजूद होता है। यदि किसी एंटिटी प्रकार की अपनी create()
मेथड है, तो उसी का उपयोग करना सबसे अच्छा होता है, हालांकि एंटिटी बनाने के सार्वभौमिक तरीके भी मौजूद हैं:
$node_entity_type = \Drupal::entityTypeManager()->getDefinition('node');
$node = new Node([
$node_entity_type->getKey('bundle') => 'movie',
$node_entity_type->getKey('label') => 'Foo',
'field_release_date' => '1/1/2015',
]);
$node->save();
अंत में, save()
मेथड का उपयोग करके हम एंटिटी को सहेजते हैं।
प्रोग्राम के माध्यम से नोड (Entity) अपडेट करना
$nid = 234;
$node_storage = \Drupal::entityTypeManager()->getStorage('node');
$node = $node_storage->load($nid);
$node->title = 'New title';
$node->field_text = 'text';
$node->save();
एंटिटी फ़ील्ड्स को संपादित करने के बारे में विस्तार से हमने पिछले लेख में देखा था:
http://drupalbook.org/drupal/9111-work-entity-fields-programmatically
प्रोग्राम के माध्यम से नोड (Entity) हटाना
यदि आप केवल एक नोड हटाना चाहते हैं, तो यह delete()
मेथड के माध्यम से किया जा सकता है:
$nid = 123;
$node = node_load($nid);
$node->delete();
प्रोग्राम के माध्यम से एक से अधिक नोड (Entities) बनाना
जब आपको बहुत सारे नोड्स लोड करने की आवश्यकता हो, तो उन्हें एक-एक करके लोड करना प्रदर्शन के दृष्टिकोण से महंगा हो सकता है, क्योंकि प्रत्येक नोड के अपने फ़ील्ड्स होते हैं और हर बार डेटाबेस से डेटा लाने के लिए कई SQL क्वेरी चलानी पड़ती हैं। यह तरीका अधिक प्रभावी है — सभी नोड्स को एक साथ लोड करना:
$nids = db_select('node_field_data', 'n')
->fields('n', ['nid'])
->condition('title', $my_title)
// node_access टैग एक्सेस अधिकारों की जाँच करेगा।
->addTag('node_access')
->execute()
->fetchCol();
$nodes = Node::loadMultiple($nids);
प्रोग्राम के माध्यम से कई नोड्स (Entities) हटाना
$result = \Drupal::entityQuery("node")
->condition('created', strtotime('-30 days'), '=')
->execute();
$storage_handler = \Drupal::entityTypeManager()->getStorage("node");
$entities = $storage_handler->loadMultiple($result);
$storage_handler->delete($entities);
इस तरह आप Drupal में प्रोग्रामिंग के माध्यम से किसी भी एंटिटी को जोड़, अपडेट या हटा सकते हैं। सभी CRUD ऑपरेशन्स एक समान संरचना का पालन करते हैं, चाहे आप नोड्स, उपयोगकर्ताओं, टैक्सोनॉमी टर्म्स या किसी कस्टम एंटिटी के साथ काम कर रहे हों।