繁体   English   中英

过滤Magento 1.7两类产品

[英]Filter product collection on two categories Magento 1.7

我希望获得A类或B类产品的产品系列。我已经能够使用以下php代码成功获得这些产品:

$collection = Mage::getModel('catalog/product')
    ->getCollection()
    ->joinField('category_id', 'catalog/category_product', 'category_id', 'product_id = entity_id', null, 'left')
    ->addAttributeToFilter('category_id', array('in' => array('finset' => 4,19)))
    ->addAttributeToSelect('*');

但是,如果产品同时属于类别4和19,则会显示错误:

Item (Mage_Catalog_Model_Product) with the same id "173" already exist

这是因为集合中有一个重复的行。 我正在努力寻找合适的代码来过滤掉集合中的任何重复行。 解决方案必须是对值进行分组,或使用不同的,但我不知道如何前进。

另请参阅过滤Magento集合,但不使用distinct

好的,我已经通过https://stackoverflow.com/a/13291759/991491解决了这个问题

$collection = Mage::getModel('catalog/product')
    ->getCollection()
    ->joinField('category_id', 'catalog/category_product', 'category_id', 'product_id = entity_id', null, 'left')
    ->addAttributeToFilter('category_id', array('in' => array('finset' => 3,4)))
    ->addAttributeToSelect('*');
$collection->getSelect()->group('e.entity_id');

group子句可以克服返回的重复产品ID。

相同的错误链接建议http://www.magentocommerce.com/boards/m/viewthread/245112/

这在集合中你会有同样的id

所以我在收集结束时使用下面的代码

$收藏 - > getSelect() - >不同的(真);

这将使选择明显

我收到此错误,Magento通过'/ var / reports / xxx'报告的是:

a:5:{i:0;s:71:"Item (Mage_Catalog_Model_Product) with the same id "xxx"

我想出的是用这个id去激活产品并修复它。 然后我删除了这个产品并重新创建它。 不是一个完美的解决方案,但现在有效。 但我仍然想知道那里的问题是什么? 在我们的例子中,这个错误突然来了。 我们最近没有改变或开发任何可以归咎于我们的新东西。 有没有人知道为什么会发生这种情况?

使用多个类别ID过滤产品集合

$all_categories = array('3','13','113');   
$productCollection = Mage::getModel('catalog/product')->getCollection();
$productCollection->joinField('category_id', 'catalog/category_product', 'category_id', 
                    'product_id = entity_id', null, 'left')
                  ->addAttributeToSelect('*')
                  ->addAttributeToFilter('type_id', array('eq' => 'simple'))
                  ->addAttributeToFilter('category_id', array($all_categories));
foreach($productCollection as $product)
{
    echo $product->getId() .$product->getName() . "<br/>";
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM