J'utilise Magento 2.1.0 et j'ai actuellement des difficultés à filtrer la collection de produits avec plusieurs catégories. J'ai utilisé plusieurs méthodes pour le faire fonctionner, mais ce ne sera pas le cas.
En supposant:
$catalog_ids = [618, 619, 620];
Renvoie NULL
$productCollection = $this->productCollectionFactory->create() ->addAttributeToSelect('*') ->addCategoriesFilter(array('in' => $catalog_ids));
Renvoie une exception: nom d'attribut non valide: id_catégorie
$productCollection = $this->productCollectionFactory->create() ->addAttributeToSelect('*') ->addAttributeToFilter('category_id', array( 'finset' => $catalog_ids ));
Renvoie une erreur de syntaxe ou une violation d'accès
$productCollection = $this->productCollectionFactory->create() ->addAttributeToSelect('*') ->addAttributeToFilter('category_ids', array( 'finset' => $catalog_ids ));
Des conseils sur la façon dont je pourrais avoir ce travail ou avoir un lien entre ce travail?
Réponses:
Vous êtes probablement habitué au
$this
paradigme "toutes les méthodes retournent " de Magento 1. Ce n'est plus le cas (du moins pas toujours).Plus précisément,
addCategoriesFilter()
ne renvoie rien et c'est pourquoi vous obteneznull
.Changez le code en:
la source
Votre premier essai est certainement la bonne façon de le faire:
Maintenant, il y a deux choses à garantir:
$productCollection
doit être une instance deMagento\Catalog\Model\ResourceModel\Product\Collection
pour que cela fonctionne (ou d'une classe qui l'étend).Et évidemment, vous devez avoir dans le
catalog_category_product
tableau des produits qui correspondent à cette condition, ce n'est peut-être pas le cas et c'est pourquoi vous obtenez NULL.la source