Magento 2: การรวบรวมผลิตภัณฑ์กรองตามหลายหมวดหมู่ (Magento 2.1)


10

ฉันใช้Magento 2.1.0และตอนนี้ฉันมีปัญหาในการกรองชุดผลิตภัณฑ์ที่มีหลายหมวดหมู่ ฉันใช้มากกว่าสองวิธีในการทำให้มันใช้งานได้ แต่ก็ไม่เป็นเช่นนั้น

สมมติว่า:

$catalog_ids = [618, 619, 620];
  1. ส่งคืน NULL

    $productCollection = $this->productCollectionFactory->create()
        ->addAttributeToSelect('*')
        ->addCategoriesFilter(array('in' => $catalog_ids));
  2. ส่งคืนข้อยกเว้น: ชื่อแอตทริบิวต์ไม่ถูกต้อง: category_id

    $productCollection = $this->productCollectionFactory->create()
        ->addAttributeToSelect('*')
        ->addAttributeToFilter('category_id', array(
            'finset' => $catalog_ids
        ));
  3. ส่งคืนข้อผิดพลาดทางไวยากรณ์หรือการละเมิดการเข้าถึง

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

คำแนะนำใด ๆ เกี่ยวกับวิธีที่ฉันสามารถมีงานนี้หรือมีบางสิ่งบางอย่างเชื่อมโยงงานนี้


ลองตรวจสอบ sql ที่สร้างขึ้น $ productCollection-> getSelectSql (จริง);
Arkadii Chyzhov

คำตอบ:


14

คุณอาจคุ้นเคยกับ$thisกระบวนทัศน์"ทุกวิธีคืนค่า" จาก Magento 1 นี่ไม่ใช่กรณีอีกต่อไป (อย่างน้อยก็ไม่เสมอไป)

โดยเฉพาะไม่กลับอะไรและที่ว่าทำไมคุณจะได้รับaddCategoriesFilter()null

เปลี่ยนรหัสเป็น:

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

3
หากต้องการแนะนำว่าไม่ใช่กรณีดังกล่าวอีกต่อไปก็อาจระบุไว้อย่างแรงเกินไป ฟังก์ชัน 'addCategoryFilter' (เอกพจน์) ในคลาสเดียวกันจะส่งกลับ $ this; ดังนั้นการเพิ่มค่าที่ส่งคืนใน 'addCategoriesFilter' อาจเพิ่งได้รับความสนใจจากผู้พัฒนา
Patrick van Bergen

ใช่ว่าจะทำให้รู้สึกเกินไป
เฟเบียน Schmengler

2

ความพยายามครั้งแรกของคุณเป็นวิธีที่ถูกต้องในการทำสิ่งนี้:

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

ตอนนี้มีสองสิ่งที่ต้องแน่ใจว่า: $productCollectionต้องเป็นตัวอย่างของMagento\Catalog\Model\ResourceModel\Product\Collectionการทำงานนี้ (หรือจากคลาสที่ขยายออกไป)

และแน่นอนว่าคุณต้องมีผลิตภัณฑ์ในcatalog_category_productตารางที่ตรงกับเงื่อนไขนั้นอาจไม่ใช่กรณีและนั่นคือสาเหตุที่คุณได้รับ NULL


วิธีใดที่ดีกว่าในการใช้การรวบรวมผลิตภัณฑ์หรือการใช้สัญญาบริการ Magento \ Catalog \ Api \ Data \ ProductSearch ผลการ
ค้นหาอินเทอร์เฟซ

@MagePsycho ถ้าคุณมีทางเลือกสำหรับสัญญาการบริการเสมอ)
Raphael ที่ Digital Pianism
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.