2013-10-06 110 views
0

這是我的代碼,但我只得到有庫存的產品。我想獲得所有產品,包括售罄。你有什麼主意嗎?Magento - 獲得暢銷產品包括售罄產品

$productCount = 5; 
     $storeId = Mage::app()->getStore()->getId(); 


$productsBestSellerMens = Mage::getResourceModel('reports/product_collection') 
      ->addOrderedQty() 
      ->addAttributeToSelect('*') 
      ->setStoreId($storeId) 
      ->addCategoryFilter($mensID) 
      ->setPageSize($productCount); 
+0

在原生Magento 1.7中,這個查詢沒有考慮可用性,你可以通過添加Mage :: log($ productsBestSellerMens-> getSelect() - > assemble(),null,'productsBestSellerMens來檢查。 log',TRUE);'查詢後,運行並打開文件YOUR_MAGENTO_ROOT/var/log/productsBestSellerMens.log。它確實排除了捆綁/可配置/分組,但也許這是你的問題? – OSdave

回答

1

通過OSdave註釋是開始尋找問題答案的好地方。

在它的心中,Magento在訪問數據庫時使用Zend_Db。因此,您可以使用'magic'__toString() method of Zend_Db_Select來輸出您的PHP代碼生成的底層MySQL查詢。作爲類別過濾是針對你的情況我已經適應原密碼咯:

$productCount = 5; 
$storeId  = Mage::app()->getStore()->getId(); 

$productsBestSellerMens = Mage::getResourceModel('reports/product_collection') 
    ->addOrderedQty() 
    ->addAttributeToSelect('*') 
    ->setStoreId($storeId) 
    ->setPageSize($productCount); 

var_dump((string) $productsBestSellerMens->getSelect()); 
exit; 

這是原油,但找到的非常簡單的方法所產生的SQL查詢:

SELECT 
SUM(order_items.qty_ordered) AS `ordered_qty`, 
`order_items`.`name` AS `order_items_name`, 
`order_items`.`product_id` AS `entity_id`, 
`e`.`entity_type_id`, 
`e`.`attribute_set_id`, 
`e`.`type_id`, 
`e`.`sku`, 
`e`.`has_options`, 
`e`.`required_options`, 
`e`.`created_at`, 
`e`.`updated_at` 
FROM `sales_flat_order_item` AS `order_items` 
INNER JOIN `sales_flat_order` AS `order` ON `order`.entity_id = order_items.order_id AND `order`.state <> 'canceled' 
LEFT JOIN `catalog_product_entity` AS `e` ON (e.type_id NOT IN ('grouped', 'configurable', 'bundle')) AND e.entity_id = order_items.product_id AND e.entity_type_id = 4 
WHERE (parent_item_id IS NULL) 
GROUP BY `order_items`.`product_id` 
HAVING (SUM(order_items.qty_ordered) > 0) 

正如你從查看查詢中可以看出,沒有任何過濾器「售罄」產品。

您可以使用Mage_Catalog_Model_Product類的isSaleable()方法處理「售罄」產品的顯示。 Magento模板文件/app/design/frontend/base/default/template/catalog/product/view.phtml中顯示了一個實際的例子。

還值得注意的是,當我試圖用相同的方法拉回暢銷品清單時,我發現結果與審覈的銷售數據不匹配。我們的blog提供了一個更完善的調查和更正的方法來檢索macth auditedsales數據的暢銷書。