根据产品ID列表获取产品集合

时间:2015-02-03 04:22:48

标签: php magento magento-1.9 magento-1.9.1

鉴于产品id,我可以使用

查询产品
Mage::getModel('catalog/product')->load($id);

我拥有的是一个id列表(逗号分隔),我可以explode,循环遍历每个id,然后像上面一样运行load($id)。我对性能有点担心。这是一种不同的处理方式,类似于where子句,具有IN(id1,id2,id3,id4)种语法。我谷歌周围,我看到了这个

Mage::getModel('catalog/product')->getCollection()->addAtributeToSelect('*')

我想我可以为此添加过滤器,对吗?有没有人解决类似的问题?非常感谢你。

2 个答案:

答案 0 :(得分:4)

1)使用您拥有的产品ID过滤您的收藏:

$productIds = explode(',', "1,2,3,4,5,6");
$collection = Mage::getModel('catalog/product')->getCollection()-
>addAttributeToFilter('entity_id', array('in' => $productIds));

2)如果您只想要追溯名称和放大器等特定信息。 sku等,你可以添加属性来选择,这意味着集合只会从数据库表中获取名称,而不是整个产品信息,你可以用下面的代码选择

$collection->addAttributeToSelect(array('name','sku'));

3)确定所有这些代码都是用块或模型编写的,而不是用Phtmls编写的,否则它肯定会影响页面速度。

答案 1 :(得分:1)

作为参数要求,您可以使用magento的finset函数,该函数接受数组作为参数

尝试将addAttributeToFilter与条件

一起使用
$collection->addAttributeToFilter($attribute,
    array(
        array('finset'=> array('237')),
        array('finset'=> array('238')),
        array('finset'=> array('239')),
    )
);
Or

$collection->addAttributeToFilter(
    array(
        array('attribute'=> 'attributecode','finset' => array('237')),
        array('attribute'=> 'attributecode','finset' => array('237')),
        array('attribute'=> 'attributecode','finset' => array('237')),
    )
);