Magento 2:拡張属性とカスタム属性の違いは何ですか?


12

拡張属性カスタム属性の正確な違いは何ですか?

ここに私にいくつかのアイデアを提供できる人は誰ですか?


@アミット、これで私を助けてくれますか?
匿名の

100%なぜ私が質問に答えないのかわかりません。しかし、私の見解はどちらも同じです
アミットベラ

回答:


8

カスタム属性は、製品属性、顧客属性など、エンティティを説明するために追加される属性です。これらは、EAV属性のサブセットです。

一方、拡張属性は通常、カスタム外部テーブルからエンティティに複雑なデータを追加するなど、より複雑なデータ型に使用されます。

簡単に言うと、カスタム属性はEAV標準に準拠していますが、拡張属性は、カスタム属性が処理できないより複雑なデータに使用されます。


5

カスタム属性は、マーチャントのために追加された属性です。たとえば、マーチャントは、「customizeable」という名前の製品エンティティにカスタム属性を追加する必要がある場合があります。このエンティティでは、この製品がサードパーティからカスタマイズされるかどうかの情報を保存します。

カスタム属性と拡張属性はどちらも(データを保持するために)ある程度機能は同じですが、カスタム属性と拡張属性の機能にはかなりの違いがあります。例えば

他のDBテーブルと結合することにより、拡張属性を持つ追加の検索条件を追加できます。ACLを追加することで認証できます。少し詳しく説明しましょう。

次のスニペットをご覧ください。/etc/extension_attributes.xmlを作成する必要があります

 <config>
    <extension_attributes for="Path\To\Interface">
        <attribute code="name_of_attribute" type="datatype">
           <resources>
              <resource ref="permission"/>
           </resources>
           <join reference_table="" reference_field="" join_on_field="">
              <field>field1</field>
           <field>field2</field>
           </join>
        </attribute>
    </extension_attributes>
</config>

拡張属性の検索: 結合タグでは、結合したい関連テーブルを定義し、このテーブルからデータを取得できます。で reference_table属性あなたは一方で、テーブル名を与える必要がありreference_fieldは、あなたの関係が参加/置いた上で、主キー(この拡張属性は、この例では、製品のように作成したために最初のテーブルキー)となります。 名前が示すjoin_on_fieldは、レコードが必要な2番目のテーブルPKになります。fieldsタグの下で、実際にデータを取得したい必須フィールドをすべて追加できます

拡張属性認証: タグを使用して、この特定の拡張属性値を制限できます。これを理解するには例を見てみましょう。製品に複数の拡張属性があり、そのうちの1つがすべてのユーザーに表示したくないextra_special_priceを示しているとします。この属性を制限できます。次のスニペットをご覧ください。

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Api/etc/extension_attributes.xsd">
    <extension_attributes for="Magento\Catalog\Api\Data\ProductInterface">
        <attribute code="stock_item" type="Magento\CatalogInventory\Api\Data\StockItemInterface">
            <resources>
                <resource ref="Magento_CatalogInventory::cataloginventory"/>
            </resources>
        </attribute>
    </extension_attributes>
<attribute code="logo_size" type="string">           
        </attribute>
</config>

この例では、stock_item属性は、Magento_CatalogInventory :: cataloginventory権限を持つユーザーのみに制限されていますが、logo_sizeには何の条件もありません。

したがって、現在のユーザーがcataloginventoryに対する権限を持っている場合、製品オブジェクトを(API経由またはWebから)取得すると、stock_items値のみが取得されます。

この質問の範囲外ですが、次のリンクでcustom_extensionを使用して非常に簡単な方法で属性を作成する方法を確認してください。extension_attributesの 作成方法

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