Заказ коллекций Magento после добавления элементов

у меня есть этот метод, с помощью которого я сначала извлекаю Varien_Data_Collection, а затем добавляю элементы один за другим из другого Varien_Data_Collection с помощью addItem():

    protected function _prepareCollection(){

    $productId = $this->getRequest()->getParam('id');
    $websiteId = 0;
    if ($store = $this->getRequest()->getParam('store')) {
        $websiteId = Mage::app()->getStore($store)->getWebsiteId();

        $collection = Mage::getModel('productalert/stock')
                ->getCustomerCollection()
                ->join($productId, $websiteId); 

        foreach ($collection as $item) {
            $item->setData('is_customer', 'Sì');
        }


        $guestCollection = Mage::getModel('productsalert/gueststock')->getCollection()
                ->addFieldToFilter("product_id", $productId)
                ->addFieldToFilter("website_id", $websiteId);


        foreach ($guestCollection as $guestItem) {
            $obj = new Mage_Customer_Model_Customer();
            $obj->setData($guestItem->getData());
            $obj->setData('alert_stock_id', ($guestItem->getData('alert_stock_id')+100000000));
            $obj->setData('email', $guestItem->getData('guest_email'));
            $obj->setData('is_customer', 'No');
            $collection->addItem($obj);
        }
        $collection = $collection->setOrder('add_date','ASC');
        $this->_sortCollectionDescByDate($collection);
        $this->setCollection($collection);
    }
    else{
        $this->setCollection(new Varien_Data_Collection());
    }




    return parent::_prepareCollection();

}   

Итак, когда у меня есть окончательная коллекция, я хочу установить порядок, поскольку элементы в ней имеют один общий атрибут («add_date»), поэтому я установил метод setOrder, но он не работает (кто-то в IRC сказал мне, что setOrder изменяет запрос). так что я могу сделать это вручную, но мне кажется странным, что после добавления предметов нельзя заказать коллекцию. я просмотрел API Varien_Data_Collection, но не вижу ничего, что могло бы мне помочь. Я также пытался изменить класс коллекции на Varien_Data_Collection_Db и установить метод addOrder(), но ничего не изменилось.

любая идея?

Благодарность!

Люк


person Luke    schedule 02.12.2011    source источник


Ответы (1)


Вы можете позвонить

$collection->clear();
$collection->....//here you add some logic for ordering;
$collection->load();//here collection with new filters will be loaded. 

OR

У вас может быть какая-то функция сортировки, например, указанная здесь в последнем сообщении.

person Jevgeni Smirnov    schedule 02.12.2011
comment
после вызова clear(), когда вы говорите «здесь вы добавляете логин для заказа», вы также имеете в виду setOrder()? Я просмотрел код Varien_Data_Collection (Collection.php) и вижу, что очистить удаление всех элементов ($this-›_items = array();) , поэтому изначально это не рассматривалось. - person Luke; 02.12.2011
comment
Да, но вы можете перейти по указанной ссылке и, возможно, там вы найдете то, что вам нужно. - person Jevgeni Smirnov; 02.12.2011