Magento不正确的收集计数与过滤器

时间:2012-08-13 14:10:40

标签: php magento

下面的代码我正在尝试创建一个产品系列并对其进行过滤,但是,它并没有给我一个准确的产品数量,我不知道为什么。

$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToSelect('*')
        ->joinField('category_id', 'catalog/category_product', 'category_id', 'product_id = entity_id', null, 'left')
        ->addFieldToFilter(array(
                array('attribute'=>'distributor','in'=>array(intval($distributor))),

        ))
        ->addAttributeToFilter('category_id', array(
                array('finset' => strval($cat->getId())),
        ));
$count = $collection->getSize();

例如,我有一个包含该分销商过滤器的类别,该过滤器有大约30种产品,但上面代码中的计数显示为20.相同的另一个产品有3个产品,但该数量会带来2个。

更新:修正了我自己使用finset的问题。请参阅下面的答案

2 个答案:

答案 0 :(得分:1)

尝试从此集合中获取您的查询代码,并直接在您的数据库上运行它。您可以检查查询是否正确。

试试这个:

$collection->getSelect()->__toString();

答案 1 :(得分:1)

回答了我自己的问题。用于分销商的finset,因为它是多选的。

$collection = Mage::getModel('catalog/product')->getCollection();

                    $dists = array(
                      array(
                        "finset" => array(intval($distributor))
                      ),
                    );

                    $collection->addAttributeToSelect('*')
                    ->joinField('category_id', 'catalog/category_product', 'category_id', 'product_id = entity_id', null, 'left outer')
                    ->addAttributeToFilter("distributor", $dists)
                    ->addAttributeToFilter('category_id', array(
                         array('finset' => $cat->getId()),
                    ));
                    $collection->load();
                    $count = $collection->getSize();