Estoy usando Magento 2.1.0 y actualmente tengo dificultades para filtrar la colección de productos con varias categorías. He usado más de un par de formas para que funcione, pero no lo hará.
Asumiendo:
$catalog_ids = [618, 619, 620];
Devuelve NULL
$productCollection = $this->productCollectionFactory->create() ->addAttributeToSelect('*') ->addCategoriesFilter(array('in' => $catalog_ids));Devuelve la excepción: Nombre de atributo no válido: category_id
$productCollection = $this->productCollectionFactory->create() ->addAttributeToSelect('*') ->addAttributeToFilter('category_id', array( 'finset' => $catalog_ids ));Devuelve error de sintaxis o infracción de acceso
$productCollection = $this->productCollectionFactory->create() ->addAttributeToSelect('*') ->addAttributeToFilter('category_ids', array( 'finset' => $catalog_ids ));
¿Algún consejo sobre cómo podría hacer que esto funcione o que algo vincule este trabajo?

Respuestas:
Probablemente esté acostumbrado al
$thisparadigma de "cada método devuelve " de Magento 1. Este ya no es el caso (al menos no siempre).Específicamente,
addCategoriesFilter()no devuelve nada y es por eso que obtienesnull.Cambia el código a:
fuente
Su primer intento es definitivamente la forma correcta de hacerlo:
Ahora hay dos cosas que asegurar:
$productCollectiondebe ser una instanciaMagento\Catalog\Model\ResourceModel\Product\Collectionpara que esto funcione (o de una clase que lo extienda).Y, obviamente, necesita tener productos en la
catalog_category_producttabla que coincidan con esa condición, tal vez ese no sea el caso y es por eso que obtiene NULL.fuente