Magento 2のカスタム顧客属性の値がデータベースに保存されませんか?


11

新しいモジュールに(app / code /.../ Setup / InstallData.phpを介して)顧客登録ページ(代替メールと代替番号)の2つのカスタム属性を追加しました。

(register.phtmlをオーバーライドして)カスタムテーマ内に「ビュー」を設計しました。登録ページに新しいフィールドが表示されます。ただし、新しいフィールド(代替メールと番号)内のデータはデータベース内に保存されません。

「customer_entity_int」は「0」の値を保存します。「customer_entity_varchar」は何も保存しません。

ここに画像の説明を入力してください

この画面では、値が「0」として保存されていることがわかります。attribute_id 132は、登録ページの「Alternate Contact Number」用です。そのため、この値には、フロントエンドの登録ページで入力するデータを保持する必要があります。

何が悪いのですか?


カスタム拡張を使用して顧客属性を追加しましたか?
Kishan Patadia 2017

私は「PHTML」ファイルをオーバーライドすることでカスタマイズした新しいテーマを通じてカスタムモジュール(アプリ/コード/.../セットアップ/ InstallData.php)を介してこれを追加しましたし、それの「ビュー」を作っ...
Kartik

データを保存する前に、モデルを印刷して、値が存在するかどうかを確認します。
Kingshuk Deb 2017

インデックスを再作成してキャッシュをクリアしましたか?
Kishan Patadia 2017

モデルの印刷後も適切な値が表示される場合は、クエリをログに記録して、クエリがどのように生成されるかを確認し、値がそのクエリに存在するかどうかを確認してください。app / etc / di.xmlを開いてそれを行うには...を検索しQuiet、1つのオカレンスのみを見つけ、それをに変更しFileます。ここでファイルMagento\Framework\DB\Logger\Fileを開き、$logAllQueriestrueに設定します。ブラウザを更新して、生成されたファイルを開きますvar/debug/db.log。クエリを見つけて確認します。
Kingshuk Deb 2017

回答:


20

あなたはおそらくあなたの問題を解決しましたが、私としてグーグルからここに来る人々のために、解決策があります:

顧客属性を作成するときは、次のことに注意してください。

属性が属性セットgroupに追加されます

customer_eav_attribute
eav_entity_attribute

属性は顧客フォームに割り当てられます

customer_form_attribute

最後の1つはどういうわけか最も重要ですが、人々はそれをスキップして、なぜ顧客属性がバックエンドから保存したくないのか疑問に思っています:「customer_eav_attribute」テーブルの「is_system」フラグを必ず0に設定してください。保存されません。

これは、インストール/アップグレードスクリプト内の属性パラメーターで属性オプションを "system" => 0に設定することで実行できます。

結局、キャッシュをフラッシュすることを忘れないでください!

ソリューションへの直接リンク


is_system = 0で属性を保存できますが、なぜ0にする必要があるのか​​教えてください。テーブルのデフォルトで1として
bhargav shastri 2018

1
@bhargav shastri、is_system属性はMagentoに属するため
user2804

はい私はそれのおかげだ
bhargavシャーストリー

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;

乾杯、

レナート

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.