Ich verwende Magento 2.1.0 und habe derzeit Probleme beim Filtern der Produktsammlung nach mehreren Kategorien. Ich habe mehr als ein paar Möglichkeiten verwendet, damit es funktioniert, aber es wird nicht.
Angenommen:
$catalog_ids = [618, 619, 620];
Gibt NULL zurück
$productCollection = $this->productCollectionFactory->create() ->addAttributeToSelect('*') ->addCategoriesFilter(array('in' => $catalog_ids));
Gibt eine Ausnahme zurück: Ungültiger Attributname: category_id
$productCollection = $this->productCollectionFactory->create() ->addAttributeToSelect('*') ->addAttributeToFilter('category_id', array( 'finset' => $catalog_ids ));
Gibt einen Syntaxfehler oder eine Zugriffsverletzung zurück
$productCollection = $this->productCollectionFactory->create() ->addAttributeToSelect('*') ->addAttributeToFilter('category_ids', array( 'finset' => $catalog_ids ));
Irgendwelche Ratschläge, wie ich diese Arbeit haben oder etwas mit dieser Arbeit verknüpfen könnte?
Antworten:
Sie sind wahrscheinlich an das
$this
Paradigma "Jede Methode gibt zurück " aus Magento 1 gewöhnt. Dies ist nicht mehr der Fall (zumindest nicht immer).Insbesondere
addCategoriesFilter()
gibt nichts zurück und deshalb erhalten Sienull
.Ändern Sie den Code in:
quelle
Ihr erster Versuch ist definitiv der richtige Weg:
Jetzt müssen zwei Dinge sichergestellt werden: Es
$productCollection
muss eine Instanz sein,Magento\Catalog\Model\ResourceModel\Product\Collection
damit dies funktioniert (oder von einer Klasse, die es erweitert).Und natürlich müssen Sie Produkte in der
catalog_category_product
Tabelle haben, die dieser Bedingung entsprechen. Vielleicht ist das nicht der Fall und deshalb erhalten Sie NULL.quelle