1

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

$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 解决了这个问题。请看下面我的回答

4

2 回答 2

1

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

尝试这个:

$collection->getSelect()->__toString();
于 2012-08-13T16:49:06.273 回答
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();
于 2012-08-13T17:42:30.253 回答