среда, 24 июля 2013 г.

Magento EAV Attribute for Customer

      Недавно столкнулся с проблемой. Был создан атрибут для customer'a. В него записывалось значение, он сохранялся в бд (видно через phpmyadmin), но при загрузке у него было нулевое значение. Самое интересное, что другие атрибуты, котрые были добавлены до меня, тоже странно работали. Но, все таки работали.
      Самое первое, как я понял нужно делать, это обновлять кэш (в т.ч. удалять папку cache), а также делать обновление index'сов. 
      Решение проблемы, было очень простым. 
      Сначала нужно взять коллекцию пользователей:
protected function _getCustomers()
    {
        $collection = Mage::getResourceModel('customer/customer_collection');
        $collection
            ->addAttributeToSelect('loyalty_reward_buy_start_date')
            ->addAttributeToSelect('loyalty_reward_buy_end_date')
            ->addAttributeToSelect('loyalty_reward_buy_points')
            ->addAttributeToSelect('loyalty_reward_total_points')
            ->addAttributeToSelect('loyalty_reward_buy_level')
            ->addAttributeToSelect('loyalty_reward_all_coupons')
            ->addAttributeToSelect('preferred_store_id')
        ;
        $collection->getSelect()->where('is_active = 1');
        return $collection;
    }
И, как видно из кода, нужно было добавить имя атрибута, в запрос используя метод addAttributeToSelect. Потом, из коллекции, выбираешь нужного customer'a и в нем благополучно будут загружены указаные атрибуты. Которые потом изменяешь и благополучно сохраняешь спомощью save(). 
Из этой проблемы я также выяснил, что плохо изучил взаимодействие magento с БД.

Комментариев нет:

Отправить комментарий