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
$this
paradigma 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:
$productCollection
debe ser una instanciaMagento\Catalog\Model\ResourceModel\Product\Collection
para que esto funcione (o de una clase que lo extienda).Y, obviamente, necesita tener productos en la
catalog_category_product
tabla que coincidan con esa condición, tal vez ese no sea el caso y es por eso que obtiene NULL.fuente