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

问题描述:

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

那么,我试图做的是添加一个自定义字段的销售订单。我认为它的工作方式与类别产品相同,但看起来不像。 我在做这一切时的总体观点是因为我想跟踪谁在向产品目录添加产品,并希望将特定订单与特定用户(而非客户)联系起来。

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表中的条目。 我不知道我是否做错了什么,或者这是不可能做到的? 我也想过通过创建额外的表来追踪用户订单|产品之间的关系来解决这种不同的方式。这需要更多的工作艰难。

任何想法? 谢谢。

我知道这是一个旧帖子,但当我在寻找相同问题的答案时遇到了它,所以认为我会分享我的解决方案。

让我们以销售订单的一个属性为例。

首先,Magento的不再是用户EAV实体销售,如果你看一下核心/法师/销售/等/ config.xml中

<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具有己sales_flat_order的表Mage_Sales_Model_Resource_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); 
+0

谢谢老兄,真的! – Ivo 2014-09-05 14:47:53

对于版本> 1.4.1.0,你必须创建在sales_flat_order表中的列。你可以看看这篇文章 is magento sales eav