2013-10-06 102 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数据的畅销书。