2012-02-28 65 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