Używam Magento 2.1.0 i mam obecnie trudności z filtrowaniem kolekcji produktów z wieloma kategoriami. Użyłem więcej niż kilku sposobów, aby to zadziałało, ale nie zadziała.
Zarozumiały:
$catalog_ids = [618, 619, 620];
Zwraca NULL
$productCollection = $this->productCollectionFactory->create() ->addAttributeToSelect('*') ->addCategoriesFilter(array('in' => $catalog_ids));
Zwraca wyjątek: niepoprawna nazwa atrybutu: id_kategorii
$productCollection = $this->productCollectionFactory->create() ->addAttributeToSelect('*') ->addAttributeToFilter('category_id', array( 'finset' => $catalog_ids ));
Zwraca błąd składniowy lub naruszenie dostępu
$productCollection = $this->productCollectionFactory->create() ->addAttributeToSelect('*') ->addAttributeToFilter('category_ids', array( 'finset' => $catalog_ids ));
Wszelkie porady na temat tego, w jaki sposób mogę mieć tę pracę lub coś powiązać z tą pracą?
Odpowiedzi:
Prawdopodobnie przyzwyczaiłeś się do
$this
paradygmatu „każda metoda zwraca ” z Magento 1. Już tak nie jest (przynajmniej nie zawsze).W szczególności
addCategoriesFilter()
nic nie zwraca i dlatego otrzymujesznull
.Zmień kod na:
źródło
Twoja pierwsza próba jest zdecydowanie właściwym sposobem:
Teraz należy zapewnić dwie rzeczy:
$productCollection
musi to być instancja,Magento\Catalog\Model\ResourceModel\Product\Collection
aby to zadziałało (lub z klasy, która ją rozszerza).I oczywiście musisz mieć produkty w
catalog_category_product
tabeli, które pasują do tego warunku, może tak nie jest i dlatego otrzymujesz NULL.źródło