【问题标题】:Get a collection of products base on list of product id根据产品 ID 列表获取产品集合
【发布时间】:2023-03-05 11:25:02
【问题描述】:

给定一个产品id,我可以使用查询该产品

Mage::getModel('catalog/product')->load($id);

我有一个 id 列表(逗号分隔),我可以 explode 它,循环遍历每个 id,然后像上面一样运行 load($id)。我有点担心性能。这是一种不同的处理方式吗,比如where 子句,带有IN(id1,id2,id3,id4) 类型的语法。我google了一下,我看到了这个

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

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

【问题讨论】:

    标签: php magento magento-1.9 magento-1.9.1


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      根据要求,您可以使用 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')),
          )
      );  
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-12-09
        • 1970-01-01
        • 1970-01-01
        • 2014-07-04
        • 1970-01-01
        相关资源
        最近更新 更多