Magento ordena colecciones después de agregar elementos
-
27-10-2019 - |
Pregunta
Tengo este método en el que recupero primero un Varien_Data_Collection y luego agrego elementos uno por uno de otro Varien_Data_Collection por 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();
}
Entonces, cuando tenga la colección final, quiero establecer el orden, ya que los elementos tienen un atributo en común ('add_date'), así que configuré los métodos setOrder, pero no funciona (alguien en IRC me dijoque setOrder modifica la consulta).así que puedo hacerlo manualmente, pero me parece extraño que no haya que ordenar una colección después de agregar elementos.Eché un vistazo a la API Varien_Data_Collection pero no veo nada que pueda ayudarme.También intenté cambiar la clase de colección a Varien_Data_Collection_Db y configurar el método addOrder () pero nada ha cambiado.
¿Alguna idea?
¡gracias!
Lucas
Solución
Puede llamar
$collection->clear();
$collection->....//here you add some logic for ordering;
$collection->load();//here collection with new filters will be loaded.
O
Puede tener algún tipo de función de clasificación como especificado aquí en el último mensaje.