फ़ील्ड मान द्वारा नोड कैसे लोड किया जाए?


19

मैं एक निश्चित नोड लोड करना चाहता हूं। मैं नोड की आईडी नहीं जानता, लेकिन मुझे पता है कि यह एक निश्चित हैश क्षेत्र है जो अद्वितीय है और मुझे पता है कि हैश।

मैं हैश फ़ील्ड के माध्यम से नोड लोड करना चाहता हूं। मैं उसे कैसे कर सकता हूँ?

जवाबों:


14

आप EntityFieldQuery का उपयोग करके प्राप्त कर सकते हैं।

D8 के लिए EntityFieldQuery को फिर से लिखा गया है।

ड्रुपल 8:

$query = \Drupal::entityQuery('entity_test');
$default_langcode_group = $query->andConditionGroup()
  ->condition('user_id', $properties[$default_langcode]['user_id'], '=', $default_langcode)
  ->condition('name', $properties[$default_langcode]['name'], '=', $default_langcode);
$langcode_group = $query->andConditionGroup()
  ->condition('name', $properties[$langcode]['name'], '=', $langcode)
  ->condition("$this->field_name.value", $field_value, '=', $langcode);
$result = $query
  ->condition('langcode', $default_langcode)
  ->condition($default_langcode_group)
  ->condition($langcode_group)
  ->sort('name', 'ASC', $default_langcode)
  ->execute();

मैं एक इकाई के क्षेत्र के मूल्यों को कैसे प्राप्त करूं?

$query = \Drupal::entityQuery('node')
    ->condition('status', 1)
    ->condition('changed', REQUEST_TIME, '<')
    ->condition('title', 'cat', 'CONTAINS')
    ->condition('field_tags.entity.name', 'cats');

$nids = $query->execute();

इसलिए अगर मैं इसे सही ढंग से समझ रहा हूं, तो यह नोड आईडी (या एक या कोई भी, शर्त के आधार पर) का एक गुच्छा लौटाएगा, लेकिन मुझे अभी भी Node::उक्त नोड्स को लोड करने के लिए उपयोग करना होगा, सही?
एंड्र्यू

हाँ आप सही है।
DRUPWAY

31

फ़ील्ड मान द्वारा किसी विशिष्ट नोड को लोड करने का सबसे तेज़ तरीका विधि का उपयोग करना है loadByProperties()

आप एक या अधिक फ़ील्ड मान निर्दिष्ट करते हैं और लौटाया गया एक सरणी है जिसमें फ़ील्ड मानों से मेल खाते नोड्स होते हैं:

$nodes = \Drupal::entityTypeManager()
  ->getStorage('node')
  ->loadByProperties(['title' => $title]);

आम तौर पर आप नोड्स पर लूप करते हैं। आपके मामले में आप एक विशिष्ट नोड की तलाश कर रहे हैं। सरणी में एक एकल नोड भी लौटाया जाता है, इसलिए लागू करें reset()और यह नोड या NULL या तो रिटर्न करता है यदि कुछ भी नहीं मिला:

if ($node = reset($nodes)) {
  // found $node that matches the title
}

1
मुझे लगता है कि मेरे मामले में मुझे कोड के दूसरे भाग ( $node = reset...) की आवश्यकता नहीं है क्योंकि हैश ही अद्वितीय है।
एंड्रयू

3
एकल नोड अभी भी एक सरणी में है। आप $ नोड = $ नोड्स का उपयोग कर सकते हैं [0], लेकिन तब आपको जांचना होगा कि त्रुटि लॉग में चेतावनी से बचने के लिए कोई नोड है या नहीं। रीसेट () बेहतर है क्योंकि यह चुपचाप NULL देता है।
4k4

निश्चित नहीं है कि इसके लिए सभी उत्थान क्यों हों; मूल प्रश्न फ़ील्ड मान द्वारा नोड लोड करना है। एक संपत्ति (जैसे शीर्षक) एक क्षेत्र नहीं है।
लिक्विड

@liquidcms, शीर्षक एक नोड फ़ील्ड है और आप किसी अन्य नोड फ़ील्ड का उपयोग कर सकते हैं। BTW Drupal फ़ील्ड्स में एक या अधिक गुण होते हैं। यदि यह एक संपत्ति है, तो ड्रुपल संपत्ति के नाम मूल्य का सबसे अधिक बार उपयोग करता है। इसलिए अधिकांश क्षेत्रों के लिए दोनों शर्तें विनिमेय हैं।
4k4

दो अलग-अलग क्षेत्रों drupal.stackexchange.com/questions/250306/…
4k4
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.