属性backend_type = static?


23

誰かが属性のbackend_type 静的の重要性/関連性を説明できますか?

属性がロードされないという問題がありますが、これbackend_typeに何か関係があるのでしょうか?

また、これはフラットテーブルに何が入れられるかに関して何らかの形で関連していますか?

回答:


37

静的属性は、エンティティのメインテーブルに格納されている属性です-カタログ製品用catalog_product_entity。たとえばsku、カタログ製品の属性はとして定義されstaticます。静的属性は常にMagentoによってロードされ、特に情報をすばやく取得したり、データの検索を最適化したい場合に役立ちます。このタイプの属性の欠点は、ストア固有の値を使用できないことです。これは、Magento EAVシステムの利点の1つです。

属性をとして定義した場合でもstatic、メインエンティティテーブルに対応する列がない限り、Magentoはそのように扱いません。列が存在しない場合、Magentoはvarcharデフォルトで属性を扱い、モデルのvarchar EAVテーブルで検索しますcatalog_product_entity_varchar

プロジェクトで静的属性を使用する場合は、インストール/アップグレードスクリプトで2つのことを行う必要があります。最初に、正しいエンティティー定義を使用して、メインエンティティテーブルに列を追加する必要があります。次に、addAttribute()メソッドを使用して属性をインストールし、属性をとして定義する必要がありますstaticMage_Catalogこの場合の動作をよりよく理解するには、インストールスクリプトを参照してください。

カスタムの静的属性に基づいてクエリを頻繁に実行する場合は、新しい列にインデックスを追加して、データの取得を高速化することを検討してください。


1
category_idsは静的です。catalog_product_entity_varcharテーブルにはありません。
ahnbizcad

要約:静的は、値がの列であることを意味し、catalog_product_entityそうでない場合、catalog_product_entity_varcharのチェックにフォールバックします。
ahnbizcad

1

コアからのサンプルは次のとおりです。

$installer->run("
    ALTER TABLE `{$installer->getTable('catalog/product')}` ADD `has_options` SMALLINT(1) NOT NULL DEFAULT '0';
");

$installer->addAttribute('catalog_product', 'has_options', array(
    'type' => 'static',
    'visible'=>false,
    'default' => false
));

1
これは質問と何の関係がありますか?
マリウス

@Mariusこれは、静的属性を追加する方法の単なるサンプルです。
ロマンスニトコ

MySQLを介してDBに列を直接追加するとします。既存の製品属性のTYPEをSTATICに変更するにはどうすればよいですか?質問:特定のテーブルのtype = staticを更新するだけで機能しますか?
-snh_nl
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.