Лучший способ добавить атрибут в коллекцию - PullRequest
2 голосов
/ 11 января 2012

Я переопределяю Mage / Adminhtml / Sales / Order / Grid.php и добавляю некоторые данные в prepareCollection. Таким образом, я сделал так, чтобы атрибут EAV атрибута клиента был включен в коллекцию, но это было несколько странно. Мне было интересно, есть ли лучший способ.

protected function _prepareCollection()
{
    $collection = Mage::getResourceModel($this->_getCollectionClass());
    foreach ($collection as &$object){
        $customer = Mage::getModel('customer/customer')
            ->setId($object->getCustomerId())
            ->load();
        $object->setCampaignId($customer->getCampaignId());

    }
    $this->setCollection($collection);
    return parent::_prepareCollection();
}

Ответы [ 2 ]

8 голосов
/ 11 января 2012

Вам нужно будет объединить данные из записей клиентов в коллекцию заказов перед ее загрузкой.

Вы можете наблюдать за коллекцией до и после загрузки событий. Для коллекции sales/order_grid_collection эти события sales_order_grid_collection_load_before и sales_order_grid_collection_load_after - вы захотите использовать первое. Доступ к коллекции можно получить в вашем _before_load наблюдателе событий через $observer->getOrderGridCollection().

0 голосов
/ 30 января 2012
  protected function _prepareCollection() {

    $collection = Mage::getResourceModel($this->_getCollectionClass());
    $class = get_class($collection);
    $attribute = Mage::getModel('eav/config')
                ->getAttribute('customer', 'campaign_id');
    $attributeId = $attribute->getAttributeId();
    $backendType = $attribute->getBackendType();  //probably varchar

    $tableName = Mage::getSingleton('core/resource')
            ->getTableName('customer_entity_' . $backendType);

    $collection->getSelect()
                ->joinLeft(array('v' => $tableName),
                        'main_table.customer_id = v.entity_id AND attribute_id = 153',
                        array('v.value', 'v.attribute_id'));

    $this->setCollection($collection);

    return parent::_prepareCollection();
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...