एक इकाई है, जो एक इकाई क्षेत्र के लिए unit_metadata_wrapper के साथ एक नया मान सहेजें


9

मुझे एक इकाई पर फ़ील्ड के लिए एक नया मान सहेजने की आवश्यकता है और मैं सोच रहा था कि क्या Unit_metadata_wrapper का उपयोग करना संभव है या क्या यह केवल मौजूदा मूल्य सेट करना संभव है?


यह है कि मैंने $ रैपर को कैसे सेट किया था-> vimn_related_subjects-> सेट (सरणी ($ कुंजी)); लेकिन अगर मैं सरणी के अंत में एक मूल्य जोड़ना चाहता था? क्या यह संभव है?
एंड्रयू वेल्च

क्या आपने कोशिश की है $wrapper->vimn_related_subjects[] = $value;?
क्लाइव

जवाबों:


31

जब बहु-मूल्य वाले फ़ील्ड के साथ काम करते हैं, तो संबंधित इकाई मेटाडेटा आवरण ऑब्जेक्ट EntityListWrapper का एक उदाहरण है (उपलब्ध तरीकों को देखने के लिए एपीआई ब्राउज़ करने के लिए यह एक अच्छा विचार हो सकता है। यह भी ध्यान दें कि यह वर्ग Arrayccess इंटरफ़ेस को लागू करता है )।

तो EntityListWrapper में नए मूल्यों को जोड़ने का सबसे सरल तरीका "[]" ऑपरेटर का उपयोग करके है:

$wrapper->field_example[] = $new_value;

यह एक नई प्रविष्टि बनाता है और इसे मान प्रदान करता है। इस विधियों के साथ, डेल्टा (मूल्य की सूची के भीतर ऑफसेट) स्वचालित रूप से बनाया गया है। यदि आप चाहें तो आप स्वयं भी ऑफसेट सेट कर सकते हैं। निम्नलिखित तीन विधियों में से कोई भी समतुल्य है:

$wrapper->field_example[$delta] = $new_value;
$wrapper->field_example->offsetSet($delta, $new_value);
$wrapper->field_example->get($delta)->set($new_value);

यदि तीन डेल्टा पहले से मौजूद हैं, तो सभी तीन मामलों में यह मानों को अधिलेखित कर देगा और यदि नहीं तो एक नई प्रविष्टि बनाएँ।

आप सीधे फ़ील्ड पर ही मान की एक सरणी सेट कर सकते हैं। दोनों विधियाँ समतुल्य हैं:

$value = array
  0 => array('property_example' => 'hello'),
  1 => array('property_example' => 'world')
);
$wrapper->field_example = $value;
$wrapper->field_example->set($value);

हालाँकि इसके लिए आपको उस क्षेत्र की आंतरिक संरचना को जानना होगा जिसे आप असाइन कर रहे हैं क्योंकि आप क्षेत्र के मेटाडेटा आवरण का उपयोग नहीं कर रहे हैं।

अंत में आप एक बहु मान फ़ील्ड को खाली मान पर सेट करके खाली कर सकते हैं। सभी तीन विधियाँ समतुल्य हैं:

$wrapper->field_example->set();
$wrapper->field_example = array();
$wrapper->field_example = NULL;

"EntityMetadataWrapperException: अज्ञात डेटा प्रॉपर्टी Array। EntityStructureWrapper-> getPropertyInfo () में" मैं आपके दूसरे दृष्टिकोण की कोशिश कर रहा हूं, हालांकि मैं एक विशिष्ट भाषा को लक्षित कर रहा हूं। यानी, $ रैपर-> भाषा ($ लैंग) -> {$ फ़ील्ड} -> सेट ($ new_array);
13

$w->field_allowed_regions->set(array(null));एकमात्र समाशोधन विकल्प है जिसने मेरे बहु-मूल्य वाले टैक्सोनॉमी संदर्भ क्षेत्र के लिए काम किया है।
अतुल्य

3

मैने पाया कि

$wrapper->field_example[]->set($new_value);

एक घातक विफलता थी। परंतु

$wrapper->field_example[NULL]->set($new_value);

इसकी अनुमति थी।

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