2012-02-28 64 views
1

我希望得到的是有产品X作为相关产品的产品的集合。Magento的过滤器系列产品通过在它们的相关产品此项目的项目

所以,说我开始用

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

,并希望添加类似(但有一些反向in代替eq):

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

我无法找到任何东西,但假设它会包含一些描述的连接。我宁愿避免加载所有产品,然后通过所有产品相关的所有相关信息,原因很明显。

回答

1

您可以做

// @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); 

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

+0

最后我不需要这一点,所以没有测试它。我会将其标记为正确的,并且会改变,如果有人发表意见,否则。谢谢你的帮助。 – 2012-03-23 08:51:38

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(); 

上述代码将使用已分配$ _productId作为相关产品的ID数组填充$ collection。

注:这部作品CE 1.9.1.0