Magento 2: Ürün Koleksiyonunu Birden Çok Kategoriye Göre Filtrele (Magento 2.1)


10

Magento 2.1.0 kullanıyorum ve şu anda birden fazla kategoriyle ürün koleksiyonunu filtrelemede zorlanıyorum. Çalıştırmak için birkaç yoldan daha fazlasını kullandım ama olmayacak.

varsayarsak:

$catalog_ids = [618, 619, 620];
  1. NULL döndürür

    $productCollection = $this->productCollectionFactory->create()
        ->addAttributeToSelect('*')
        ->addCategoriesFilter(array('in' => $catalog_ids));
  2. İstisna döndürür: Geçersiz özellik adı: category_id

    $productCollection = $this->productCollectionFactory->create()
        ->addAttributeToSelect('*')
        ->addAttributeToFilter('category_id', array(
            'finset' => $catalog_ids
        ));
  3. Sözdizimi hatası veya erişim ihlali döndürür

    $productCollection = $this->productCollectionFactory->create()
        ->addAttributeToSelect('*')
        ->addAttributeToFilter('category_ids', array(
            'finset' => $catalog_ids
        ));

Bu işe nasıl sahip olabileceğime veya bu işe bağlayan bir şeylere sahip olabileceğime dair herhangi bir tavsiye var mı?


Oluşturulan sql kontrol etmeye çalışın. $ productCollection-> getSelectSql (true);
Arkadii Chyzhov

Yanıtlar:


14

Muhtemelen $thisMagento 1'den "her yöntem döndürür " paradigmasına alışkınsınız. Bu artık böyle değil (en azından her zaman değil).

Özellikle, addCategoriesFilter()hiçbir şey döndürmez ve bu yüzden alırsınız null.

Kodu şu şekilde değiştirin:

$productCollection = $this->productCollectionFactory->create();
$productCollection->addAttributeToSelect('*');
$productCollection->addCategoriesFilter(array('in' => $catalog_ids));

3
Artık durumun böyle olmadığını ileri sürmek muhtemelen çok güçlü bir şekilde ifade edilmiştir. Aynı sınıftaki 'addCategoryFilter' (tekil) işlevi $ this döndürür; Dolayısıyla, 'addCategoriesFilter' öğesine dönüş değeri eklemek muhtemelen bir geliştiricinin dikkatinden kaçmıştır.
Patrick van Bergen

Evet, bu da mantıklı olurdu
Fabian Schmengler

2

İlk denemeniz kesinlikle bunu yapmanın doğru yolu:

$values = [318, 619, 620];
$conditionType = "in";
$productCollection->addCategoriesFilter([$conditionType => $values]);

Şimdi sağlamanız $productCollectiongereken iki şey var: Magento\Catalog\Model\ResourceModel\Product\CollectionBunun çalışması için (ya da onu genişleten bir sınıftan) bir örnek olmalı .

Ve tabii ki catalog_category_producttabloda bu koşulla eşleşen ürünlere ihtiyacınız var , belki de durum böyle değildir ve bu yüzden NULL alırsınız.


Ürün toplama veya servis sözleşmelerini kullanmanın en iyi yolu hangisidir? Magento \ Catalogue \ Api \ Data \ ProductSearchResultsInterface
MagePsycho

@MagePsycho eğer seçiminiz her zaman servis sözleşmeleri için giderse;)
Raphael at Digital Pianism
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.