Estou usando o Magento 2.1.0 e atualmente estou tendo dificuldades em filtrar a coleção de produtos com várias categorias. Eu usei mais de duas maneiras de fazê-lo funcionar, mas não funcionará.
Assumindo:
$catalog_ids = [618, 619, 620];
Retorna NULL
$productCollection = $this->productCollectionFactory->create() ->addAttributeToSelect('*') ->addCategoriesFilter(array('in' => $catalog_ids));
Retorna exceção: Nome de atributo inválido: category_id
$productCollection = $this->productCollectionFactory->create() ->addAttributeToSelect('*') ->addAttributeToFilter('category_id', array( 'finset' => $catalog_ids ));
Retorna erro de sintaxe ou violação de acesso
$productCollection = $this->productCollectionFactory->create() ->addAttributeToSelect('*') ->addAttributeToFilter('category_ids', array( 'finset' => $catalog_ids ));
Algum conselho sobre como eu poderia ter esse trabalho ou algo relacionado a esse trabalho?
Respostas:
Você provavelmente está acostumado ao
$this
paradigma "todo método retorna " do Magento 1. Este não é mais o caso (pelo menos nem sempre).Especificamente,
addCategoriesFilter()
não retorna nada e é por isso que você recebenull
.Mude o código para:
fonte
Sua primeira tentativa é definitivamente a maneira certa de fazer isso:
Agora, há duas coisas a garantir:
$productCollection
deve ser uma instânciaMagento\Catalog\Model\ResourceModel\Product\Collection
para que isso funcione (ou de uma classe que a estenda).E, obviamente, você precisa ter produtos na
catalog_category_product
tabela que correspondam a essa condição, talvez não seja esse o caso e é por isso que você recebe NULL.fonte