Magento фильтрует продукты по товарам, которые имеют этот товар в связанных продуктах

Я хочу получить коллекцию продуктов, в которой продукт x является родственным продуктом.

Итак, скажем, я начинаю с

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

И хотите добавить что-то вроде (но с некоторым обратным in вместо eq):

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

Я ничего не могу найти, но предположим, что это будет включать в себя присоединение к некоторому описанию. Я бы предпочел не загружать все продукты, а затем все, что связано для каждого велосипеда через все их, по понятным причинам.

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

Я тестировал, что он работает без ошибок в отношении моей БД, но у меня нет ссылок на продукты в моей базе данных (мы получаем из веб-службы), поэтому я не могу быть уверен, что он возвращает ожидаемые продукты.


У меня недавно была такая же проблема, но в итоге я создал небольшой модуль для этого, чтобы он был повторно использован. Но для простоты приведенную ниже версию моего решения можно найти ниже.

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

Вышеприведенный код заполнит $ collection массивом идентификаторов, которым присвоен $ _productId как родственный продукт.

Примечание: это работает на CE 1.9.1.0

licensed under cc by-sa 3.0 with attribution.