प्रोग्राम संबंधी संदर्भ क्षेत्र को प्रोग्रामेटिक रूप से अपडेट करें


23

मुझे पता है कि मैं Drupal 7 में एक इकाई संदर्भ फ़ील्ड को निम्न के समान कोड के साथ अद्यतन (या मान सेट कर सकता हूं) कर सकता हूं।

 $node['field_code_used_by'][LANGUAGE_NONE][0]['target_id'] = $id;

मैं Drupal 8 में अपने उपयोगकर्ता इकाई संदर्भ क्षेत्र के लिए प्रोग्रामेटिक रूप से मान सेट करना चाहता हूं।

मैंने कोशिश की $node->field_code_used_by->setValue(1);और $node->field_code_used_by->entity->value = 1;दोनों में से किसी ने भी काम नहीं किया।

मैं एक इकाई संदर्भ फ़ील्ड के लिए मान कैसे सेट कर सकता हूं?

जवाबों:


31

आपको निम्नलिखित के समान कोड का उपयोग करने की आवश्यकता है।

    $node = Node::load($nid);     
    $node->field_code_used_by->target_id = $user_id;
    $node->save();

एक बहु-मूल्य फ़ील्ड के लिए, मूल्य को सूची के अंत में जोड़ने के लिए, निम्न कोड का उपयोग करें।

$node->field_code_used_by[] = ['target_id' => $user_id];

एक और तरीका entityइकाई वस्तु के साथ संपत्ति सेट कर रहा है, जैसा कि निम्नलिखित कोड में है।

    $node = Node::load($nid);
    $user = \Drupal\user\Entity\User::load(1);
    $node->field_code_used_by->entity = $user;
    $node->save();

2
यह तब तक काम नहीं करता है जब तक कि मूल नोड पहले से मौजूद न हो। जब एक नए, सहेजे गए मूल नोड के लिए target_id या एंटिटी प्रॉपर्टी असाइन करते हैं, तो संबंध सहेजा नहीं जाता है। (संभवतः एक पूर्ण इकाई रेफरी क्षेत्र में असाइन करते समय भी काम नहीं करता है, लेकिन मैंने इसका परीक्षण नहीं किया है।) किसी को पता है कि इस मामले को कैसे संबोधित किया जाए?
१:52:५२ पर अनारोनबूमन

@ARonbauman क्या आपको इसका कोई हल मिला?
गूंज

@ क्या मुझे याद नहीं है कि कैसे या अगर मैंने इस के आसपास काम किया। यदि मेरे व्यवहार का वर्णन सटीक है, तो यह एक बग है। यदि इसके लिए drupal.org पर कोई खुला मुद्दा नहीं है, तो होना चाहिए
aaronbauman

@ARonbauman drupal.org/project/paragraphs/issues/2707017#comment-11872624 ने मुझे नए नोड के साथ वह काम करने में मदद की। तो एक बग नहीं लगता है।
गूंज

11

D7 की तरह D8 में एक संदर्भ क्षेत्र की मुख्य संपत्ति अभी भी है target id:

$node->field_code_used_by->target_id = $user_id;

entityसंपत्ति एक परिकलित मान है। यदि आप इस मान में कोई ऑब्जेक्ट डालते हैं, तो ड्रुपल इसे dababase में सहेजने से पहले इसे वापस id में बदल देगा।

खेतों की बहुतायत

एक बहुक्षेत्र फ़ील्ड में एक आइटम जोड़ें:

$node->field_code_used_by[] = ['target_id' => $user_id];

संपत्ति target_idआवश्यक नहीं है, क्योंकि यह मुख्य संपत्ति है और डिफ़ॉल्ट रूप से उपयोग की जाती है। इसलिए अधिकांश क्षेत्रों के लिए आप एक साधारण php सरणी में मान जोड़ सकते हैं, जिसे याद रखना आसान है:

$node->field_code_used_by[] = $user_id;

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