2012-02-28 63 views
2

我有一個名爲「New」的類別,其中有14個產品。addCategoryFilter在Magento中根本不起作用

我使用Mage::getModel('catalog/category')->load(6);加載此類別(6是管理員中的ID)。

如果我打電話給echo $category->getProductCount();它正確顯示14(該類別中的產品數量)。現在

,我抓住了從產品類別與

$products = Mage::getModel('catalog/product') 
    ->setStoreId(Mage::app()->getStore()->getId()) 
    ->getCollection() 
    ->addAttributeToFilter('visibility', $visibility) 
    ->addCategoryFilter($category) 
    ->addAttributeToSelect("*") 
    ->setOrder('name','asc'); 

顯示這些產品的所有14,然後用一個簡單的循環foreach(),但是當我通過$products對象循環,它實際上回報所有我的產品。

我使用的版本是1.6.2.0,並且我清除了緩存。

有沒有人有一個原因,這是行不通的?

編輯

調用echo (string) $products->getSelect();回報

SELECT `e`.*, IF(at_visibility.value_id > 0, at_visibility.value, at_visibility_default.value) AS `visibility`, `cat_index`.`position` AS `cat_index_position`, IF(at_name.value_id > 0, at_name.value, at_name_default.value) AS `name` FROM `catalog_product_entity` AS `e` INNER JOIN `catalog_product_entity_int` AS `at_visibility_default` ON (`at_visibility_default`.`entity_id` = `e`.`entity_id`) AND (`at_visibility_default`.`attribute_id` = '95') AND `at_visibility_default`.`store_id` = 0 LEFT JOIN `catalog_product_entity_int` AS `at_visibility` ON (`at_visibility`.`entity_id` = `e`.`entity_id`) AND (`at_visibility`.`attribute_id` = '95') AND (`at_visibility`.`store_id` = 1) INNER JOIN `catalog_category_product_index` AS `cat_index` ON cat_index.product_id=e.entity_id AND cat_index.store_id=1 AND cat_index.category_id='13' AND cat_index.is_parent=1 LEFT JOIN `catalog_product_entity_varchar` AS `at_name_default` ON (`at_name_default`.`entity_id` = `e`.`entity_id`) AND (`at_name_default`.`attribute_id` = '65') AND `at_name_default`.`store_id` = 0 LEFT JOIN `catalog_product_entity_varchar` AS `at_name` ON (`at_name`.`entity_id` = `e`.`entity_id`) AND (`at_name`.`attribute_id` = '65') AND (`at_name`.`store_id` = 1) WHERE (((IF(at_visibility.value_id > 0, at_visibility.value, at_visibility_default.value) = '4') OR (IF(at_visibility.value_id > 0, at_visibility.value, at_visibility_default.value) = '2'))) ORDER BY `name` as 
+0

你可以告訴我們循環,也許這裏有什麼問題...... – Alexandre 2012-02-28 11:35:06

+0

這樣做:'echo(string)$ products-> getSelect();'你會看到正在使用的SQL,那樣你可以告訴WHERE子句中的內容以及它是否被過濾。 – clockworkgeek 2012-02-28 11:55:55

+0

我已將查詢添加到問題中。 – dotty 2012-02-28 16:01:26

回答

5

時簡化它的工作對我來說:

$cat = Mage::getModel('catalog/product')->setId(198); 

$products = Mage::getModel('catalog/product') 
    ->getCollection() 
    ->addCategoryFilter($cat) 
    ->addAttributeToSelect("*") 
    ->setOrder('name','asc') 
    ->load(); 

foreach($products as $p) { 
    print_r($p->getSku().PHP_EOL); 
} 

順便說一句,SQL更具可讀性(對我來說,反正)如果您在getCollection之後立即放置addAttributeToSelect調用。

+1

針對所有仍然存在此問題的人的說明:在添加產品後重新編制您的類別數據。 (測試:Magento 1.7) – 2013-01-08 14:14:33

+0

確實。當指定商店ID時,我無法工作。我不知道爲什麼。 – Willster 2013-08-21 12:59:39