【问题标题】:Magento filter products by items that have this item in their related productsMagento 按相关产品中包含此项目的项目过滤产品
【发布时间】:2012-03-18 04:12:42
【问题描述】:

我希望获得将产品 x 作为相关产品的产品集合。

所以,假设我开始了

$_productCollection = $product->getCollection()
->addAttributeToSelect('*')
->addAttributeToFilter('status',1)
->addStoreFilter()
->distinct(true);

并希望添加类似的内容(但使用一些反向 in 而不是 eq):

$_productCollection->addAttributeToFilter('related_ids',array('eq' => $idofproductx));

我找不到任何东西,但假设它会包含一些描述的连接。出于显而易见的原因,我宁愿避免加载所有产品,然后再加载所有与每个循环相关的所有产品。

【问题讨论】:

    标签: magento


    【解决方案1】:

    我最近遇到了同样的问题,但我最终为此制作了一个小模块,以便它可以重复使用。 但为简单起见,我的解决方案的精简版本可以在下面找到。

    // load by a product Id
    $_product = Mage::getModel('catalog/product')->load($_productId);
    
    $_linkInstance = $_product->getLinkInstance();
    $collection = $_linkInstance->getLinkCollection();
    
    // get products which have $_productId as a link
    $collection->addFieldToFilter('linked_product_id',  array('eq' => $_product->getId()));
    
    // 1 = related products
    $collection->addLinkTypeIdFilter(1);
    $collection->joinAttributes();
    

    上面的代码将使用一组 ID 填充 $collection,这些 ID 已将 $_productId 指定为相关产品。

    注意:这适用于 CE 1.9.1.0

    【讨论】:

      【解决方案2】:

      你也许可以做到

      // @var $products array
      $_productCollection->getSelect()->join(array('links' => 'catalog_product_link'), 'e.entity_id = links.product_id');
      
      $_productCollection->getSelect()->where('links.linked_product_id IN (?)', $products);
      

      我测试了它对我的数据库运行没有错误,但我的数据库中没有产品链接(我们从网络服务获取),所以我不能确定它返回预期的产品。

      【讨论】:

      • 我最终不需要这个,所以没有测试它。我会把它标记为正确的,如果有人不同意的话,我会改变它。感谢您的帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-09
      • 2011-04-14
      • 2020-03-08
      • 1970-01-01
      • 1970-01-01
      • 2017-04-28
      • 1970-01-01
      相关资源
      最近更新 更多