Я знаю, что это старый пост, но я наткнулся на него, когда искал ответы на ту же проблему, поэтому подумал, что поделюсь своим решением.
Давайте добавим атрибут в заказ на продажу какпример.
Во-первых, Magento больше не использует EAV-сущности для продаж, если вы посмотрите на core / Mage / Sales / etc / config.xml
<sales>
<class>Mage_Sales_Model</class>
<resourceModel>sales_resource</resourceModel>
</sales>
resouceModel больше не указывает на sales_entity(EAV), теперь он указывает на sales_resource (flat).Если вы посмотрите на дочерние элементы узла 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 с validпараметры.
Фрагмент кода добавления атрибута 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);