Magento加载具有所有属性的产品集合

时间:2014-08-26 09:22:38

标签: php magento

我需要迭代一些产品并访问自定义属性,我的代码是:

$collection = Mage::getModel('catalog/product')
    ->getCollection()
    ->addAttributeToSelect('*')
    ->addAttributeToFilter(array(array('attribute' => 'status', 'eq' => '1')))
    // more filters
    ->load();

然后我必须:

foreach ($collection as $product) {
    // here I can't access custom attributes
    $product = Mage::getModel('catalog/product')->load($product->getId());
    // here I can access them
}

我的问题是当我有很多产品时,我的脚本会在foreach循环中花费大量时间。我可以通过加载具有所有属性的集合来加速这个吗?

3 个答案:

答案 0 :(得分:1)

我建议你所有的属性应该放在平面表中。

一些属性设置如搜索,可在前端列表中找到。

然后进行索引。

现在,当您获得产品集合时,您将获得所需的属性,然后从那里获得代码。

您需要加载一系列产品,而不是加载每个产品的循环。

答案 1 :(得分:0)

如果您使用的是平台,则必须将自定义属性添加到平面索引中。您可以将它们添加到相应模块的config.xml中。 您可以跳过foreach中的productload,这可能会导致处理时间过长。

答案 2 :(得分:-2)

你在做什么不是一个好习惯,应该避免。你可以试试这个

foreach($collection->getItems() as $item){

     echo $item->getName(); //$item is product instance. you can use it
}

修改

在你的问题中,你犯了一个严重错误,应该避免。这就是我想通过我的答案指出的。

看看你在这做什么。

foreache($bigcollection as $singleone){
      $product = Mage::getModel('catalog/product')->load($id);
}

基本上你是在一个大的for循环中加载一个产品。这是一个很大的错误。因为如果你这样做,Magento需要做额外的提取工作"来自数据库。 不要使用该方法。通过我的解决方案,我向您展示了如何避免在forloop中加载产品。这是一种非常可靠的方法。

如果您不想使用forloop,我认为您需要编辑您的问题并将该要求放在那里。

如果你需要避免for循环,你需要选择平面表概念。这是我所知道的唯一一种方式。否则你无法避免每个循环。 :)