Magento Collection删除类别过滤器

时间:2012-02-01 11:29:42

标签: magento

我在我的扩展程序中编写产品列表,但是当我编写该集合时,它会添加额外的类别过滤器,我不需要。

这是我的代码:

$collection = Mage::getResourceModel('catalog/product_collection');
$attributes = Mage::getSingleton('catalog/config')->getProductAttributes();
$collection->addAttributeToSelect($attributes)
           ->addMinimalPrice()
           ->addFinalPrice()
           ->addTaxPercents()
           ->addStoreFilter();

$collection->addIdFilter($result);
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection);
Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection);
$collection->printlogquery(true);

你可以看到我没有添加任何类别过滤器检查但是当我打印查询时我得到了这个:

    SELECT `e`.*, `price_index`.`price`, `price_index`.`tax_class_id`,
           `price_index`.`final_price`, IF(`price_index`.`tier_price`,
           LEAST(`price_index`.`min_price`, `price_index`.`tier_price`),
           `price_index`.`min_price`) AS `minimal_price`,
           `price_index`.`min_price`, `price_index`.`max_price`, 
           `price_index`.`tier_price`,
           `cat_index`.`position` AS `cat_index_position`
      FROM `mage_catalog_product_entity` AS `e`
INNER JOIN `mage_catalog_product_index_price` AS `price_index`
        ON price_index.entity_id = e.entity_id
       AND price_index.website_id = '1'
       AND price_index.customer_group_id = 0
INNER JOIN `mage_catalog_category_product_index` AS `cat_index`
        ON cat_index.product_id=e.entity_id
       AND cat_index.store_id='1'
       AND cat_index.visibility IN(2, 4)
       AND cat_index.category_id='3'
     WHERE (e.entity_id in ('724', '729', '733', '737', '741', '745', '749', '755',
                            '759', '766', '770', '775', '780', '785', '920', '921',
                            '923', '927', '957', '958', '959', '960', '961', '962',
                            '963', '964', '965', '966', '967', '1146', '1147', '1185', 
                            '1186', '1187', '1188', '1189', '1190', '1191', '1192', 
                            '1193', '1194', '1195', '1196', '1274', '1275', '1276', 
                            '1277', '1278', '1279', '1280', '1281', '1282', '1283', 
                            '1284', '1285', '1286', '1287', '1288', '1289', '1290', 
                            '1291', '1292', '1293', '1294', '1295', '1310', '1311', 
                            '1312', '1313', '1314', '1315'))

在这里,您会看到在查询中它正在打印我不需要的cat_index.category_id='3'。我需要知道如何在那里删除此类别过滤器?

1 个答案:

答案 0 :(得分:3)

使用

时会添加类别过滤器
Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection);

相反,删除该行,并将其替换为:

$collection->addAttributeToFilter('visibility', array('in' => array(Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_CATALOG, Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH) ));
相关问题