OSdave 的评论是开始寻找问题答案的好地方。
Magento 的核心是在访问数据库时使用 Zend_Db。因此,您可以使用Zend_Db_Select 的 'magic' __toString() 方法来输出 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)
从查看查询中可以看出,没有任何内容可以过滤“售罄”产品。
isSaleable()
您可以使用类的方法来处理“售罄”产品的显示Mage_Catalog_Model_Product
。Magento 模板文件中显示了一个实际的示例/app/design/frontend/base/default/template/catalog/product/view.phtml
。
还值得注意的是,当我尝试使用相同的方法拉回畅销书列表时,我发现结果与经审计的销售数据不符。我们的博客上提供了更全面的调查和更正的方法,用于检索经过 macth 审计的销售数据的畅销书。