首页 文章

过滤Magento 1.7两类产品

提问于
浏览
5

我希望获得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

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

另见Filter Magento collection but not products, using distinct

4 回答

  • 13

    好的,我已经解决了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 .

  • 2

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

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

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

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

    这将使选择明显

  • 1

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

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

    我做的是用这个id停用产品并修复它 . 所以我删除了这个产品并重新创建 . 不是一个完美的解决方案,但现在工作 . 但还是想知道那里有什么问题?关于这个“独特”的解决方案,对我来说,这个错误突然出现,我们最近没有改变或开发任何可能导致此问题的新内容 . 任何人都知道为什么会突然发生这种情况?

  • 0

    Filter Product Collection using multiple category ids

    $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() . "
    "; }

相关问题