Пользовательский атрибут заказов на продажу Magento 1.6.2.0 не работает - PullRequest
1 голос
/ 24 марта 2012

Я уже потратил весь день на это, и я думаю, что я не могу заставить это работать, потому что возможность добавлять пользовательские атрибуты EAV к заказам была удалена.По крайней мере, я заметил, что sales_order_entity отсутствует.

Что я пытаюсь сделать, это добавить пользовательское поле в заказы на продажу.Я думал, что это будет работать так же, как и для продуктов категории, но выглядит как нет.Моя общая цель в том, чтобы делать все это, потому что я хочу отслеживать, кто добавляет товары в каталог, и хочу связать определенный заказ с определенным пользователем (а не с клиентом).заказы.У меня есть обязательные записи в таблице eav_attribute.Я не знаю, делаю ли я что-то не так или это просто невозможно?Я также думал о том, чтобы решить этот другой путь, создав дополнительную таблицу для отслеживания отношений между пользовательским заказом и продуктом.Это потребовало бы дополнительной работы.

Есть идеи?Спасибо.

Ответы [ 2 ]

4 голосов
/ 17 апреля 2013

Я знаю, что это старый пост, но я наткнулся на него, когда искал ответы на ту же проблему, поэтому подумал, что поделюсь своим решением.

Давайте добавим атрибут в заказ на продажу какпример.

Во-первых, 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);
0 голосов
/ 19 февраля 2014

Для версий> 1.4.1.0 вам нужно будет создать столбец в таблице sales_flat_order. Вы можете посмотреть в этом посте является продажей magento

...