마 젠토 2 : 여러 카테고리별로 제품 수집 필터링 (마 젠토 2.1)


10

내가 사용하고 젠토 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 (true);
Arkadii Chyzhov

답변:


14

당신은 아마도 $thisMagento 1 의 "모든 메소드 리턴 "패러다임에 익숙 할 것입니다 . 이것은 더 이상 그렇지 않습니다 (적어도 항상 그런 것은 아닙니다).

구체적으로, addCategoriesFilter()아무것도 반환하지 않으므로 이것이 당신이 얻는 이유 null입니다.

코드를 다음과 같이 변경하십시오.

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

3
더 이상 그렇지 않다는 것을 암시하는 것은 아마도 너무 강력하게 언급되었을 것이다. 같은 클래스의 'addCategoryFilter'(단수) 함수는 $ this를 반환합니다. 따라서 'add CategoriesFilter'에 반환 값을 추가하면 개발자의 관심을 피할 수 있습니다.
Patrick van Bergen

네, 그것도 말이됩니다
Fabian 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 \ ProductSearchResultsInterface
MagePsycho

@MagePsycho 선택의 여지가 있다면 항상 서비스 계약을 선택하십시오.)
Raphael at Digital Pianism
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.