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('*')

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

4

2 回答 2

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编写的,否则它肯定会影响页面速度。

于 2015-02-03T05:08:16.563 回答
1

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

尝试使用带有 or 条件的 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')),
    )
);  
于 2015-02-07T07:38:54.380 回答