我希望获得一系列产品x作为相关产品的产品。
所以,说我从
开始$_productCollection = $product->getCollection()
->addAttributeToSelect('*')
->addAttributeToFilter('status',1)
->addStoreFilter()
->distinct(true);
并希望添加类似(但有一些反向in
而不是eq
):
$_productCollection->addAttributeToFilter('related_ids',array('eq' => $idofproductx));
我找不到任何东西,但假设它会包含一些描述的连接。我宁愿避免加载所有产品,然后所有产品都通过它们全部相关,原因显而易见。
答案 0 :(得分: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服务获取),所以我不能确定它返回预期的产品。
答案 1 :(得分: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