Magento 2 कस्टम ग्राहक विशेषता का मान डेटाबेस में सहेजा नहीं जा रहा है?


11

मैंने ग्राहक पंजीकरण पृष्ठ (वैकल्पिक ईमेल और वैकल्पिक नंबर) के लिए दो कस्टम विशेषताओं को एक नए मॉड्यूल में जोड़ा है (के माध्यम से: app / code /.../ सेटअप / InstallData.php)।

मैंने एक कस्टम थीम के अंदर इसका 'व्यू' डिजाइन किया है (रजिस्टर.phtml को ओवरराइड करके)। अब मैं पंजीकरण पृष्ठ पर नए फ़ील्ड देख सकता हूं। हालाँकि नए फ़ील्ड (वैकल्पिक ईमेल और नंबर) के अंदर डेटा डेटाबेस के अंदर सहेजा नहीं जा रहा है।

'customer_entity_int' '0' मान बचाता है .. 'customer_entity_varchar' कुछ भी नहीं बचाता है ..

यहाँ छवि विवरण दर्ज करें

यहां स्क्रीन में आप देख सकते हैं मान को '0' के रूप में सहेजा गया है। एट्रीब्यूट_आईडी 132 पंजीकरण पृष्ठ पर 'वैकल्पिक संपर्क नंबर' के लिए है। इसलिए मुझे उस डेटा को रखने की उम्मीद है जो मैं फ़्रंटएंड पंजीकरण पृष्ठ पर दर्ज कर रहा हूँ।

मैं क्या गलत कर रहा हूं ?


क्या आपने कस्टम एक्सटेंशन का उपयोग करके ग्राहक विशेषताएँ जोड़ी हैं?
किशन पाटडिया

मैंने इसे एक कस्टम मॉड्यूल (ऐप / कोड /.../ सेटअप / InstallData.php) के माध्यम से जोड़ा और 'phtml' फ़ाइल को ओवरराइड करके एक अनुकूलित नई थीम के माध्यम से इसे 'व्यू' बनाया ..
कार्तिक

डेटा को सहेजने से पहले .. मॉडल को प्रिंट करें और जांचें कि क्या आपके मान हैं।
किंग्सुक देब

क्या आपने reindex और clear cache किया था?
किशन पाटडिया

यदि मॉडल को प्रिंट करने के बाद भी यह उचित मान दिखाता है, तो क्वेरी को लॉग इन करने का प्रयास करें और जांचें कि क्वेरी कैसे उत्पन्न हो रही है और देखें कि क्या आपके प्रश्न उस क्वेरी में हैं। ऐसा करने के लिए एप्लिकेशन / etc / di.xml खोलें ... खोज करें Quiet, आपको केवल 1 घटना मिलेगी और इसे बदल देंगे File। अब फ़ाइल खोलें Magento\Framework\DB\Logger\Fileऔर $logAllQueriesसत्य पर सेट करें। और ब्राउज़र को रीफ़्रेश करें और जनरेट की गई फ़ाइल खोलें var/debug/db.log। अपनी क्वेरी ढूंढें और क्वेरी जांचें।
किंग्सुक देब

जवाबों:


20

आपने शायद अपनी समस्या हल कर ली है, लेकिन जो लोग मेरे रूप में Google से यहां आए हैं, उनके लिए एक समाधान है:

ग्राहक विशेषता बनाते समय, कृपया निम्नलिखित बातों का ध्यान रखें:

विशेषता सेट, समूह में विशेषता जोड़ी जाती है

customer_eav_attribute
eav_entity_attribute

विशेषता को ग्राहक रूपों को सौंपा गया है

customer_form_attribute

और आखिरी सबसे महत्वपूर्ण है कि किसी भी तरह, लोग बस इसे छोड़ दें और सोचें कि ग्राहक विशेषता बैकएंड से क्यों बचाना नहीं चाहता है: कृपया "is_system" ध्वज को "customer_eav_attribute" तालिका में 0 पर सेट करना सुनिश्चित करें, अन्यथा विशेषता सहेजा नहीं जाएगा।

इसे इंस्टॉल / अपग्रेड स्क्रिप्ट के अंदर विशेषता मापदंडों में "विकल्प" => 0 के लिए विशेषता विकल्प सेट करके किया जा सकता है।

सब के बाद अपने कैश फ्लश करने के लिए मत भूलना!

समाधान के लिए सीधा लिंक


मैं is_system = 0 द्वारा विशेषता को सहेज सकता हूं, लेकिन क्या आप मुझे बता सकते हैं कि हमें इसे 0 बनाने की आवश्यकता क्यों है? तालिका 1 में डिफ़ॉल्ट रूप से इसके 1 के रूप में
भार्गव शास्त्री

1
@ भार्गव शास्त्री, क्योंकि is_system का गुण Magento से है
user2804

हाँ, मुझे यह धन्यवाद मिला
bhargav shastri

0

A.aksymiuk के जवाब ने एक आकर्षण की तरह काम किया। यहाँ SQL स्क्रिप्ट (MySQL / Maria DB) मैंने अपनी विशेषता के साथ समस्या को ठीक करने के लिए बनाई है:

# Sets up attribute_id to be changed
select @ATTRIBUTE_ID := attribute_id from eav_attribute where attribute_code  = 'attribute_code';

# Refence attribute_id to be used to create the group (here customer email) 
SELECT @REFENCENCE_ATTRIBUTE_ID := attribute_id FROM eav_attribute where entity_type_id = 1 AND attribute_code = 'email';

# Verifies it exists in the customer table
SELECT * FROM customer_eav_attribute WHERE attribute_id = @ATTRIBUTE_ID;

# Fixes is_system issue
UPDATE customer_eav_attribute SET is_system = 0 WHERE attribute_id = @ATTRIBUTE_ID;

# Fixes group issue using same values as the customer email attribute
INSERT INTO eav_entity_attribute 
SELECT null, entity_type_id, attribute_set_id, attribute_group_id, @ATTRIBUTE_ID, 100
FROM eav_entity_attribute 
WHERE attribute_id IN (@REFENCENCE_ATTRIBUTE_ID) 
LIMIT 1;

चीयर्स,

रेनाटो

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