首页>Magento>source

尝试创建属性时,我发现属性代码的最大长度为30个字符.事实证明,这实际上并不是某种真正的限制 - 它是一个完全任意的值,由

定义
Mage_Eav_Model_Entity_Attribute::ATTRIBUTE_CODE_MAX_LENGTH.

因此,为什么会有限制? 为什么默认为30,而不是实例255,这是数据库列的实际限制?

PS.如果有人能想到这个问题的更好的标签,请更新它们。

最新回答
  • 2019-12-5
    1 #

    这几乎肯定在添加Oracle支持的1.6部分中有所改变 - 在Oracle中,列只能是30个字符,所以很多 Magento属性缩短了,我想这个限制是同时添加的.

    请参阅http://m-chanaan.hr/wp-content/uploads/2013/04/RDBMS_Guide2.pdf以进行大量讨论.

  • 2019-12-5
    2 #

    团队或个人开发者不互相交谈的完美例子.而主要的 eav_attribute   桌子的 atrtibute_code   是一个 varchar(255) ,此代码值通常用于其他表.

    catalog_product_link_attribute   有一个 product_link_attribute_code   属性(属性代码),此列是 varchar(32) .回到史前时代,当销售对象是EAV对象时,他们有一个attribute_code列,其中有 varchar(50)   作为一个长度。

    # Mage/Sales/sql/sales_setup/mysql4-upgrade-0.9.45-0.9.46.php
    $installer->getConnection()->addColumn($this->getTable('sales_order'), $attribute['attribute_code'], 'varchar(50) NULL');
    

    我想也有其他人。

    如果没有关于正在构建的内容的实际规范或协议,负责属性部分的UI的开发人员可能会查看所有 attribute_code   列,选择最短的列,并强制执行一个长度,以确保用户无法创建一个属性代码,该属性代码对于其他开发人员正在处理的各种表之一来说太长.

    至于为什么开发商会选择 varchar   不是 255的长度   - 有一个关于数据库设计的思想学派,只要他们需要节省磁盘空间,减少RAM,在连接操作中更有效等等,你就只能创建列。一些开发人员仍然坚持这一点与现代 "让它尽可能大,后来担心性能影响"的趋势.很明显,对于 varchar的最大长度存在分歧   对于 attribute_code 曾经是Magento核心团队中的一员,现在它仍然存在于遗留代码中.

  • 2019-12-5
    3 #

    像xyphoid一样说, previous   支持Oracle BD时会导致限制,因为在Oracle中,列只能是30个字符。

    现在,

    在okorshenko核心修改后(PR#10225)

      According app/code/Magento/Eav/Model/Entity/Attribute.php#L29

     
    const ATTRIBUTE_CODE_MAX_LENGTH = 60;
    

      And according MySQL Reference Manual

    The following table describes the maximum length for each type of identifier.

     
    | Identifier | Maximum Length (characters) |
    |------------|-----------------------------|
    | Column     | 64                          |
    

    The value is defined as 60   因为在平面模式下属性代码将被转换为列名. MySQL在列名中只允许64个符号.

  • 2019-12-5
    4 #

    要解决此错误,请使用此代码

    CONST ATTRIBUTE_CODE_MAX_LENGTH = 30; 至60

    代码应为

    CONST ATTRIBUTE_CODE_MAX_LENGTH = 60;

    这将解决您的问题。

  • magento2.2:数据库中的产品价格表列在哪里?
  • 属性的选项:在属性集中使用(或不使用)