Nilai atribut pelanggan kustom Magento 2 tidak disimpan dalam basis data?

11

Saya telah menambahkan dua atribut khusus untuk halaman pendaftaran pelanggan (Alternate email & Alternate number) dalam modul baru (melalui: app / code /.../ Setup / InstallData.php).

Saya telah mendesain 'view' -nya di dalam tema khusus (dengan mengesampingkan register.phtml). Sekarang saya dapat melihat bidang baru di halaman pendaftaran. Namun data di dalam bidang baru (email dan nomor alternatif) tidak disimpan di dalam basis data.

'customer_entity_int' save '0' value .. 'customer_entity_varchar' tidak menyimpan apa-apa ..

masukkan deskripsi gambar di sini

Di sini, di layar Anda dapat melihat nilai disimpan sebagai '0'. Atribut_id 132 adalah untuk 'Nomor Kontak Alternatif' di halaman pendaftaran. Jadi saya berharap nilai untuk menyimpan data yang saya masukkan di halaman pendaftaran frontend.

Apa yang saya lakukan salah?

Kartik
sumber
Apakah Anda menambahkan atribut pelanggan menggunakan ekstensi khusus?
Kishan Patadia
Saya menambahkannya melalui modul khusus (app / code /.../ Setup / InstallData.php) dan membuatnya 'view' melalui tema baru yang disesuaikan dengan menimpa file 'phtml' ..
Kartik
Sebelum menyimpan data .. cetak modelnya dan periksa apakah nilainya ada di sana.
Kingshuk Deb
Apakah Anda mengindeks ulang dan menghapus cache?
Kishan Patadia
Jika masih menunjukkan nilai yang tepat setelah mencetak model, cobalah untuk mencatat kueri dan memeriksa bagaimana kueri dihasilkan dan lihat apakah nilai Anda ada di dalam kueri itu. Untuk melakukan itu terbuka untuk pencarian app / etc / di.xml ... Quiet, Anda hanya akan menemukan 1 kejadian dan mengubahnya ke File. Sekarang buka file Magento\Framework\DB\Logger\Filedan setel $logAllQuerieske true. dan menyegarkan browser dan membuka file yang dihasilkan var/debug/db.log. Temukan kueri Anda dan periksa kueri.
Kingshuk Deb

Jawaban:

20

Anda mungkin telah memecahkan masalah Anda tetapi bagi orang-orang yang datang ke sini dari google seperti saya, ada solusinya:

Saat membuat atribut pelanggan, harap perhatikan hal-hal berikut:

Atribut ditambahkan ke set atribut, grup

customer_eav_attribute
eav_entity_attribute

Atribut diberikan ke formulir pelanggan

customer_form_attribute

Dan yang terakhir yang paling penting sebagai entah bagaimana, orang hanya melewatinya dan bertanya-tanya mengapa atribut pelanggan tidak ingin menyimpan dari backend: Pastikan untuk mengatur tabel "is_system" flag di "customer_eav_attribute" tabel ke 0, jika atribut tidak akan disimpan.

Ini dapat dilakukan dengan mengatur opsi atribut ke "system" => 0 pada parameter atribut di dalam skrip install / upgrade.

Jangan lupa untuk membersihkan cache Anda!

tautan langsung ke solusi

A.Maksymiuk
sumber
saya dapat menyimpan atribut dengan is_system = 0, tetapi dapatkah Anda memberi tahu saya mengapa kami harus membuatnya 0? sebagai 1 secara default pada tabel
bhargav shastri
1
@bhargav shastri, karena atribut is_system milik Magento
user2804
ya saya mendapatkannya terima kasih
bhargav shastri
0

Jawaban A.Maksymiuk bekerja seperti pesona. Berikut skrip SQL (MySQL / DB DB) yang saya buat untuk memperbaiki masalah dengan atribut saya:

# 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;

Bersulang,

Renato

medina
sumber