Magento 2:扩展属性和自定义属性有什么区别?


13

我心里有一个疑问,扩展属性自定义属性之间的确切区别是什么?

在座的任何人都可以给我一些想法吗?


@Amit,你能帮我吗?
匿名

我不确定100%为什么我不回答这个问题。但是我的观点都是相同的
阿米特·贝拉

Answers:


8

自定义属性是为描述实体而添加的属性,例如产品属性,客户属性等。这些是EAV属性的子集。

另一方面,扩展属性通常用于更复杂的数据类型,例如将其他复杂数据从自定义外部表添加到实体中。

简而言之,自定义属性符合EAV标准,而扩展属性用于自定义属性无法处理的更复杂的数据。


5

定制属性是代表商家添加的属性。例如,商人可能需要向名为“ customizeable”的产品实体添加自定义属性,在该实体中,他想保存有关该产品是否将由第三方进行定制的信息。

自定义属性和扩展属性在功能上(保留数据)都具有一点相同的功能,但是自定义属性和扩展属性的功能之间存在相当大的差异。例如

我们可以通过将其与任何其他数据库表连接来添加带有扩展属性的额外搜索条件。我们可以通过在其中添加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将是我们要记录的第二张表PK。在字段标签下,您可以添加您实际上想要获取数据的所有必填字段

扩展属性认证: 您可以通过使用标签来限制此特定扩展属性值。假设我们为产品提供了一个以上的扩展属性,其中一个说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没有任何条件。

因此,现在,如果您获得产品对象(通过api或通过网络以任何方式),如果当前用户拥有cataloginventory的权限,那么他将仅获得stock_items值。

超出此问题的范围,但请看一下如何在以下链接中以非常简单的方式使用custom_extension创建属性: 如何创建extension_attributes

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.