鉴于产品id
,我可以使用
Mage::getModel('catalog/product')->load($id);
我拥有的是一个id列表(逗号分隔),我可以explode
,循环遍历每个id,然后像上面一样运行load($id)
。我对性能有点担心。这是一种不同的处理方式,类似于where
子句,具有IN(id1,id2,id3,id4)
种语法。我谷歌周围,我看到了这个
Mage::getModel('catalog/product')->getCollection()->addAtributeToSelect('*')
我想我可以为此添加过滤器,对吗?有没有人解决类似的问题?非常感谢你。
答案 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')),
)
);