Magento 1.6.2.0销售订单自定义属性不起作用

时间:2012-03-24 18:18:02

标签: magento attributes sales

我已经花了一整天的时间在这上面,我认为我不能让这个工作,因为删除了向订单添加自定义EAV属性的可能性。 至少,我注意到sales_order_entity丢失了。

好吧,我尝试做的是为销售订单添加自定义字段。我认为它的工作方式与类别产品相同,但看起来像不。 我做这一切的总体意义是因为我想跟踪谁将产品添加到目录中,并希望将某些订单与某个用户(而不是客户)联系起来。

public function getDefaultEntities()
{
    return array(
        'catalog_product' => array(
            'entity_model'      => 'catalog/product',
            'attribute_model'   => 'catalog/resource_eav_attribute',
            'table'             => 'catalog/product',
            'additional_attribute_table' => 'catalog/eav_attribute',
            'entity_attribute_collection' => 'catalog/product_attribute_collection',
            'attributes'        => array(
                'seller_id' => array(
                    'group'             => 'MyCustom',
                    'label'             => 'Seller ID',
                    'type'              => 'int',
                    'input'             => 'text',
                    'default'           => '0',
                    'class'             => '',
                    'backend'           => '',
                    'frontend'          => '',
                    'source'            => '',
                    'global'            => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
                    'visible'           => false,
                    'required'          => true,
                    'user_defined'      => true,
                    'searchable'        => true,
                    'filterable'        => true,
                    'comparable'        => false,
                    'visible_on_front'  => false,
                    'visible_in_advanced_search' => false,
                    'unique'            => false,
                ),
            ),
        ),
        'order' => array(
            'entity_model'      => 'sales/order',
            'table'             => 'sales/order',
            'increment_model'   => 'eav/entity_increment_numeric',
            'attributes'        => array(
                'seller_id' => array(
                    'group'             => 'MyCustom',
                    'label'             => 'Seller ID',
                    'type'              => 'int',
                    'input'             => 'text',
                    'default'           => '0',
                    'class'             => '',
                    'backend'           => '',
                    'frontend'          => '',
                    'source'            => '',
                    'global'            => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
                    'visible'           => false,
                    'required'          => true,
                    'user_defined'      => true,
                    'searchable'        => true,
                    'filterable'        => true,
                    'comparable'        => false,
                    'visible_on_front'  => false,
                    'visible_in_advanced_search' => false,
                    'unique'            => false,
                ),
            ),
        ),
    );
}

适用于产品,但不适用于订单。我在eav_attribute表中需要输入。 我不知道我做错了什么或者这是不可能做到的? 我还考虑通过创建附加表来跟踪用户 - 订单|产品之间的关系来解决这种不同的方式。这需要更多艰苦的工作。

有什么想法吗? 感谢。

2 个答案:

答案 0 :(得分:4)

我知道这是一篇很老的帖子,但当我在寻找同样问题的答案时,我遇到了它,所以我想分享我的解决方案。

让我们将一个属性添加到销售订单中作为示例。

首先,如果你看看core / Mage / Sales / etc / config.xml,Magento不再是销售用户的EAV实体

<sales>
      <class>Mage_Sales_Model</class>
      <resourceModel>sales_resource</resourceModel>
</sales>

resouceModel不再指向sales_entity(EAV),它现在指向sales_resource(持平)。如果查看sales_resource节点的子节点,您将找到订单节点:

<order>
      <table>sales_flat_order</table>
</order>

这意味着Mage_Sales_Model_Order的资源模型为Mage_Sales_Model_Resource_Order,其中包含sales_flat_order表。

magento开发人员提供了类 Mage_Sales_Model_Resource_Setup ,它允许您向这个新的“平面”结构添加属性,其方式与向EAV结构添加属性的方式非常相似。如果您查看Mage_Sales_Model_Resource_Setup,您将看到以下功能:

/**
 * Add entity attribute. Overwrited for flat entities support
 *
 * @param int|string $entityTypeId
 * @param string $code
 * @param array $attr
 * @return Mage_Sales_Model_Resource_Setup
 */
public function addAttribute($entityTypeId, $code, array $attr)
{

    if (isset($this->_flatEntityTables[$entityTypeId]) &&
        $this->_flatTableExist($this->_flatEntityTables[$entityTypeId]))
    {
        $this->_addFlatAttribute($this->_flatEntityTables[$entityTypeId], $code, $attr);
        $this->_addGridAttribute($this->_flatEntityTables[$entityTypeId], $code, $attr, $entityTypeId);
    } else {
        parent::addAttribute($entityTypeId, $code, $attr);
    }
    return $this;
}

有了这些信息,您现在应该看到它只是获取Mage_Sales_Model_Resource_Setup实例并使用有效参数调用其公共addAttribute方法的情况。

将franchise_id属性添加到销售订单的代码段:

$salesResourceSetupModel = Mage::getModel('sales/resource_setup', 'core_setup');

$data=array(
    'type'=>'int',
    'input'=>'text',
    'label'=>'Franchise',
    'global'=> 1,
    'is_required'=>'0',
    'is_comparable'=>'0',
    'is_searchable'=>'0',
    'is_unique'=>'0',
    'is_configurable'=>'0',
    'user_defined'=>'1',
    //whether it should be including in the sales order grid
    'grid'=>1
);

//first param should relate to a key of the protected $_flatEntityTables array
$salesResourceSetupModel->addAttribute('order', 'franchise_id', $data);

答案 1 :(得分:0)

对于版本&gt; 1.4.1.0您必须在sales_flat_order表中创建一列。你可以看看这篇文章 is magento sales eav