Magento 2 ค่าแอตทริบิวต์ของลูกค้าที่กำหนดเองไม่ได้รับการบันทึกในฐานข้อมูล?


11

ฉันได้เพิ่มแอตทริบิวต์ที่กำหนดเองสองรายการสำหรับหน้าการลงทะเบียนลูกค้า (อีเมลสำรอง & หมายเลขสำรอง) ในโมดูลใหม่ (ผ่าน: แอพ / รหัส / ... / การตั้งค่า / InstallData.php)

ฉันได้ออกแบบ 'มุมมอง' ภายในธีมที่กำหนดเอง (โดยแทนที่ register.phtml) ตอนนี้ฉันสามารถเห็นฟิลด์ใหม่ในหน้าลงทะเบียน อย่างไรก็ตามข้อมูลภายในเขตข้อมูลใหม่ (อีเมลและหมายเลขสำรอง) ไม่ได้รับการบันทึกไว้ในฐานข้อมูล

'customer_entity_int' บันทึก '0' ค่า .. 'customer_entity_varchar' ไม่บันทึกอะไรเลย ..

ป้อนคำอธิบายรูปภาพที่นี่

ที่นี่ในหน้าจอคุณสามารถดูค่าถูกบันทึกเป็น '0' attribute_id 132 ใช้สำหรับ 'หมายเลขติดต่อสำรอง' ในหน้าลงทะเบียน ดังนั้นฉันจึงคาดหวังว่าค่านี้จะเก็บข้อมูลที่ฉันป้อนในหน้าการลงทะเบียนส่วนหน้า

ผมทำอะไรผิดหรือเปล่า ?


คุณเพิ่มแอตทริบิวต์ของลูกค้าโดยใช้ส่วนขยายที่กำหนดเองหรือไม่
Kishan Patadia

ฉันเพิ่มมันผ่านโมดูลที่กำหนดเอง (แอพ / รหัส /.../ การติดตั้ง / InstallData.php) และทำให้มันเป็น 'มุมมอง' ผ่านชุดรูปแบบใหม่ที่กำหนดเองโดยการแทนที่ไฟล์ 'phtml' ..
Kartik

ก่อนบันทึกข้อมูล .. พิมพ์รุ่นและตรวจสอบว่ามีค่าของคุณหรือไม่
Kingshuk Deb

คุณทำดัชนีใหม่และล้างแคชหรือไม่
Kishan Patadia

หากยังคงแสดงค่าที่เหมาะสมหลังจากพิมพ์แบบจำลองพยายามบันทึกคิวรีและตรวจสอบว่าคิวรีสร้างอย่างไรและดูว่าค่าของคุณอยู่ในคิวรีนั้นหรือไม่ ต้องการทำเช่นนั้นเปิดให้ app / etc / di.xml ... ค้นหาQuiet, คุณจะพบเพียง 1 Fileเกิดขึ้นและการเปลี่ยนแปลงที่ ตอนนี้เปิดไฟล์Magento\Framework\DB\Logger\Fileและตั้งค่า$logAllQueriesเป็นจริง var/debug/db.logและฟื้นฟูเบราว์เซอร์และเปิดไฟล์ที่สร้างขึ้น ค้นหาคิวรีของคุณและตรวจสอบคิวรี
Kingshuk Deb

คำตอบ:


20

คุณอาจแก้ไขปัญหาของคุณแล้ว แต่สำหรับคนที่มาที่นี่จาก Google ในฐานะฉันมีวิธีแก้ไข:

เมื่อสร้างแอตทริบิวต์ของลูกค้าโปรดระวังสิ่งต่อไปนี้:

เพิ่มแอตทริบิวต์ไปยังชุดแอตทริบิวต์กลุ่ม

customer_eav_attribute
eav_entity_attribute

มีการกำหนดแอตทริบิวต์ให้กับแบบฟอร์มลูกค้า

customer_form_attribute

และสุดท้ายสิ่งที่สำคัญที่สุดอย่างใดคนเพิ่งข้ามไปและสงสัยว่าทำไมคุณลักษณะลูกค้าไม่ต้องการบันทึกจากแบ็กเอนด์: โปรดตรวจสอบให้แน่ใจว่าตั้งค่าสถานะ "is_system" ใน "customer_eav_attribute" ตารางเป็น 0 มิฉะนั้นแอตทริบิวต์ จะไม่ถูกบันทึก

มันสามารถทำได้โดยการตั้งค่าตัวเลือกคุณลักษณะที่ "system" => 0 ในพารามิเตอร์คุณลักษณะภายในสคริปต์การติดตั้ง / อัพเกรด

อย่าลืมล้างแคชของคุณ!

ลิงก์โดยตรงไปยังโซลูชัน


ฉันสามารถบันทึกคุณสมบัติโดย is_system = 0 แต่คุณสามารถแจ้งให้เราทราบว่าทำไมเราต้องทำให้มัน 0? เป็น 1 โดยค่าเริ่มต้นในตาราง
bhargav shastri

1
@bhargav shastri เนื่องจากแอตทริบิวต์ is_system เป็นของ Magento
user2804

ใช่ฉันได้รับแล้วขอบคุณ
bhargav shastri

0

คำตอบของ A.Maksymiuk ทำงานเหมือนมีเสน่ห์ ที่นี่สคริปต์ 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;

ไชโย

Renato

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.