मैं किसी इकाई (जैसे नोड) ऑब्जेक्ट के लिए फ़ील्ड मान कैसे एक्सेस करूं?


63

node_load((int) $nid)पूरी तरह से आबादी वाले नोड इकाई को लोड करता है। $node->title->valueशीर्षक मिलता है, लेकिन मैं Drupal 8 में फ़ील्ड मानों का उपयोग कैसे करूं?

जवाबों:


89

मुझे लगता है कि आपको $entityएक सरणी में बदलने की आवश्यकता नहीं है , यह बस काम करेगा।

$entity->get('field_name')->getValue();

FYI करें: मॉड्यूल का उपयोग करने kint()से devel_kintआपको उन सभी उपलब्ध विधियों का पता चल सकेगा, जिनका उपयोग वस्तु तत्वों तक पहुंचने के लिए किया जा सकता है, इसलिए तुलनात्मक रूप var_dump()से कम मददगार है।


14
वास्तव में यह होना चाहिए: $ संस्था-> प्राप्त ('फ़ील्ड_नाम') -> मूल्य;
एड हॉलिंगहर्स्ट

1
क्या आप जानते हैं कि यह @EdHollinghurst क्यों है? getValue वास्तव में मेरे लिए त्रुटि करता है, लेकिन (dpm का उपयोग करके) यह उपलब्ध तरीकों में सूचीबद्ध है, जबकि 'मूल्य' नहीं है।
ऑटोपोएटिक

2
getValue()मेरे लिए काम करता है (दोनों 8.1.x और 8.2.x पर) आपी संदर्भ देखें
leon.nk

16
->getValue()सामान्य है और क्षेत्र प्रकार की परवाह किए बिना काम करेगा। यदि आप उपयोग करते हैं ->value, तो यह केवल तभी काम करता है जब फ़ील्ड मान किसी valueसंपत्ति में संग्रहीत किया जाता है । यह अधिक जटिल प्रकारों (जैसे दिनांक या इकाई संदर्भ) के लिए काम नहीं करेगा।
पियरे बाइल ने

4
यदि इकाई के पास "field_name" नामक फ़ील्ड नहीं है, तो यह कोड अकेले एक त्रुटि फेंक देगा। सुनिश्चित करें कि यह कोड केवल उन संस्थाओं पर चलाया जाता है जहां आप जानते हैं कि फ़ील्ड मौजूद है, आप परीक्षण करने के लिए $ संस्था-> hasField ('field_name') का उपयोग कर सकते हैं, या यदि ((खाली
इकाई-

56

Drupal 8 में, $ नोड क्लास नोड का है

 $node->field_machine_name->getValue();

या

$node->get('field_machine_name')->getValue();

मानों की एक सरणी लौटाएगा।

यदि आप केवल एक की उम्मीद करते हैं, तो आप इसके साथ सरणी को भी सख्त कर सकते हैं

$node->field_machine_name->getString();

या

 $node->get('field_machine_name')->getString();

मैं "नहीं मिलता" (स्ट्रिंग और मूल्य) "यह"। क्या आप इस उत्तर को समझाने के लिए कुछ और विवरण जोड़ सकते हैं? FYI करें: ऐसा नहीं करने पर आपका जवाब मॉडरेशन के माध्यम से डिलीट होने का खतरा होता है (क्षमा करें ...)
Pierre.Vriens

34

खेतों के लिए आप $node->body->valueउदाहरण के लिए उपयोग करने में सक्षम होना चाहिए । यदि आप यह नहीं जानते हैं कि क्षेत्र के नाम क्या हैं, तो मैं ड्रुपल 8 के लिए डेवेल मॉड्यूल को स्थापित करने और नोड का निरीक्षण करने की सलाह देता हूं dsm($node)


1
आप उस क्षेत्र को कैसे प्रस्तुत करते हैं?
एलेक्स

1
यह पुराना प्रतीत होता है
एलेक्स

1
@ मैं आपको सुझाव देता हूं कि आप जिस समस्या से जूझ रहे हैं, उससे एक नया प्रश्न पूछें। जिस समय यह एक ठीक उत्तर था, इस उत्तर को संपादित करना अब असंगत लगता है, जो इस पृष्ठ पर एक उत्तर है जिसमें इस से अधिक अंक हैं।
दस

5
चेक इस लेख एक अच्छा विवरण के लिए। आप या तो एक मान प्राप्त करने के लिए $ नोड-> फ़ील्ड_नाम-> मूल्य का उपयोग कर सकते हैं (या बहु-मूल्य फ़ील्ड की पहली कुंजी)। या आप किसी फ़ील्ड के सभी मानों को एक सरणी के रूप में प्राप्त करने के लिए $ नोड-> फ़ील्ड_नाम-> getValue () का उपयोग कर सकते हैं।
मिरसॉफ्ट

2
@tenken: वास्तव में, एक मौजूदा उत्तर को अपडेट करना नए उत्तरों के साथ एक निरर्थक प्रश्न को जोड़ने पर बेहतर है।
पियरे बाइल 18

17

आप हमेशा $entity->toArray()देख सकते हैं कि एक इकाई में क्या है। यहां तक ​​कि जब xdebug का उपयोग करते हैं (उदाहरण के लिए phpstorm के साथ) अपने आप पर एक इकाई वस्तु की भावना बनाना बहुत कठिन है। मुझे dsm($node)ड्रुपल 8 में कोई भी संदेह है। यदि आप इन-ब्राउज़र डिबगिंग पर जोर देते हैं (लेकिन आपको ऐसा नहीं करना चाहिए, तो Drupal 8 xdebug के बिना डिबग करने के लिए बहुत जटिल है) dsm($node->toArray())जो आप चाहते हैं।


$ नोड-> toArray () मेरे लिए Drupal 8 पर काम नहीं करता है।
Axel Briche

कृपया एक नया प्रश्न जोड़ें। Drupal\Core\Entity\EntityInterfaceहै toArray

1
यह उत्तर समाधान प्रदान नहीं करता है; downvoting।
कॉलन

हालांकि यह उत्तर आवश्यक रूप से इस प्रश्न का सीधा उत्तर नहीं है, लेकिन यह एक बहुत बड़ा कार्य है। धन्यवाद।
स्टीफ वान लोवरेन

14

नोड फ़ील्ड मान प्राप्त करने के लिए निम्न कोड स्निपेट का उपयोग करें

इसका उपयोग url से नोड आईडी प्राप्त करने के लिए किया जाता है

$nid = \Drupal::routeMatch()->getRawParameter($node_id);

Nid का उपयोग करके नोड डेटा लोड करने के लिए

$node = \Drupal::entityTypeManager()->getStorage('node')->load($nid);

इसका उपयोग फ़ील्ड मान प्राप्त करने के लिए किया जाता है।

$terms = $node->get('field_Name')->getValue();  

इसका उपयोग नोड शीर्षक प्राप्त करने के लिए किया जाता है।

$product_name = $node->getTitle();

2
नोड को इस तरह लोड करें: $ nid = \ Drupal :: pathMatch () -> getRawParameter ('नोड)); $ नोड = \ Drupal :: unitTypeManager () -> getStorage ('नोड') -> लोड ($ $);
रेमी

8

मेरे लिए, $entity(नोड) यह काम कर रहा है:

$entity->field_name->getValue();

8.1 का उपयोग करना।


2
यह एक बहु-मूल्य फ़ील्ड के सभी मानों को एक सरणी में प्राप्त करता है। यह निश्चित रूप से एकल-मूल्य क्षेत्र का मूल्य प्राप्त करने के लिए भी इस्तेमाल किया जा सकता है, हालांकि आउटपुट में फिर एकल मूल्य वाला एक सरणी होगा। किसी फ़ील्ड का एकल मान (या बहु-मूल्य फ़ील्ड का पहला मान) प्राप्त करने के लिए, $ इकाई का उपयोग
करें-

7

उपयोग करते समय (वास्तविक सही तरीका):

$node = \Drupal\node\Entity\Node::load($nid);
$node->get('nid')->value; // returns a raw value - Node ID

// Following both returns array structure containing value/target id nested value.
$node->get('nid')->value(); 
$node->nid->getValue();


4

यह बस है:

$node->get('field_name')->getValue()

यदि फ़ील्ड एक इकाई संदर्भ फ़ील्ड है, तो संदर्भित संस्थाओं को प्राप्त करने के लिए कुछ विशेष तरीके हैं।

लक्ष्य आईडी पाने के लिए (पहला तत्व):

$entity->get('field_entity_reference')->target_id

भरी हुई इकाई (पहला तत्व) पाने के लिए:

$entity->get('field_entity_reference')->entity

->entityफ़ील्ड पर उपयोग करते समय यह स्वचालित रूप से इकाई को लोड करता है।

यदि फ़ील्ड में कई संदर्भ हो सकते हैं, तो आप उन्हें इस तरह से ला सकते हैं:

$entities = $entity->get('field_entity_reference')->referencedEntities();

यह आपको संस्थाओं की एक सरणी देगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.