2013-04-09 2 views
2

Сообщено о нескольких случаях, когда стандартное решение (ы) для этого запроса не работает (аналогичные вопросы о SO являются изобилующими, без какого-либо окончательного решения).Сортировка Magento 1.7 по заказу - выпуски продуктов бестселлера

Что можно было бы сделать, чтобы получить коллекцию «бестселлеры» является использование этого конструктора запросов:

$storeId = Mage::app()->getStore()->getId(); 
    $collection = Mage::getResourceModel('reports/product_collection'); 

    $collection->setVisibility(Mage::getSingleton('catalog/product_visibility')->getVisibleInCatalogIds()); 

    $collection = $collection 
     ->addFieldToFilter('*') 
     ->addOrderedQty() 
     ->addStoreFilter() 
     ->setStoreId($storeId) 
     ->setOrder('ordered_qty', 'desc') 
     ->setPageSize(10) 
     ->setCurPage(1); 

Теперь $collection результат имеет некоторые фиктивные значения и не хватает важных атрибутов в целом (без имени, цена , и т.д.). Я даже не могу попробовать this core-code workaround в 1.7.

Может кто-нибудь, пожалуйста, опубликуйте решение, которое Magento 1.7 проверено/сертифицировано/проверено? (или последней версии Magento).

ответ

2

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

$storeId = Mage::app()->getStore()->getId(); 
$collection = Mage::getResourceModel('reports/product_collection'); 
$collection->setVisibility(Mage::getSingleton('catalog/product_visibility')->getVisibleInCatalogIds()); 

$collection = $collection 
    ->addFieldToFilter('*') 
    ->addStoreFilter() 
    ->setStoreId($storeId) 
    ->setPageSize(10) 
    ->setCurPage(1); 

$collection->getSelect() 
    ->joinLeft(
     'sales_flat_order_item AS order_item', 
     'e.entity_id = order_item.product_id', 
     'SUM(order_item.qty_ordered) AS ordered_qty') 
    ->group('e.entity_id') 
    ->order('ordered_qty DESC') 
; 
+0

спасибо за ответ. В настоящее время у меня есть другая реализация, основанная на более процедурном подходе. Это совсем не изящно, поэтому я дам вашу версию выстрелом. – teodron

Смежные вопросы