Я использую Magento 2.1.0, и в настоящее время у меня возникают трудности с фильтрацией коллекции продуктов по нескольким категориям. Я использовал более двух способов, чтобы заставить это работать, но это не будет.
Предполагая, что:
$catalog_ids = [618, 619, 620];
Возвращает NULL
$productCollection = $this->productCollectionFactory->create() ->addAttributeToSelect('*') ->addCategoriesFilter(array('in' => $catalog_ids));
Возвращает исключение: неверное имя атрибута: category_id
$productCollection = $this->productCollectionFactory->create() ->addAttributeToSelect('*') ->addAttributeToFilter('category_id', array( 'finset' => $catalog_ids ));
Возвращает синтаксическую ошибку или нарушение доступа
$productCollection = $this->productCollectionFactory->create() ->addAttributeToSelect('*') ->addAttributeToFilter('category_ids', array( 'finset' => $catalog_ids ));
Любой совет о том, как я мог бы иметь эту работу или что-то связать эту работу?
Ответы:
Вероятно, вы привыкли к
$this
парадигме «каждый метод возвращает » из Magento 1. Это уже не так (по крайней мере, не всегда).Конкретно
addCategoriesFilter()
ничего не возвращает и вот почему вы получаетеnull
.Измените код на:
источник
Ваша первая попытка, безусловно, правильный способ сделать это:
Теперь нужно убедиться в двух вещах:
$productCollection
должен быть экземплярMagento\Catalog\Model\ResourceModel\Product\Collection
для этого (или из класса, который его расширяет).И, очевидно, вам нужно иметь продукты в
catalog_category_product
таблице, которые соответствуют этому условию, возможно, это не тот случай, и поэтому вы получаете NULL.источник