2017-02-23 4 views
1

1 년 동안 범위 필터를 추가해야합니다. 내 모듈 FullText \ Collection에서 Magento 클래스를 다시 정의합니다. 또한 search_request.xml 파일을 변경했습니다. 내가 코드를 발견하고 나를 위해 작동합니다검색 조건에 대한 사용자 정의 필터입니다. Magento 2

$의 SKU = [ 'CNS334', 'U012840' ]

$this->filterBuilder->setField('sku'); 
    $this->filterBuilder->setValue($skus); 
    $this->filterBuilder->setConditionType('in'); 

    $this->searchCriteriaBuilder->addFilter($this->filterBuilder->create()); 

하지만 다른 테이블에 데이터가 있습니다. 가입을 시도했지만 필터링 결과가 없습니다.

$this->getSelect()->join(
     [ 
      'my' => 'make_year', 
     ], 
     'e.entity_id = my.product_id' 

$this->searchCriteriaBuilder->addFilter($this->filterBuilder 
     ->setField('year') 
     ->setValue(2014) 
     ->setConditionType('from') 
     ->create()); 

$this->searchCriteriaBuilder->addFilter($this->filterBuilder 
     ->setField('year') 
     ->setValue(2015) 
     ->setConditionType('to') 
     ->create()); 

    $this->searchCriteriaBuilder->addFilter($this->filterBuilder->create()); 

답변

0

다른 테이블과 쿼리를 결합하려면 조건 매퍼가 필요합니다.

예를 들어 \Magento\CatalogInventory\Model\ResourceModel\Stock\Item\StockItemCriteria::setStockStatus()을 참조하십시오. 여기에 필터가 시작됩니다.

data에 새 항목을 설정하면 매퍼 메서드 \Magento\CatalogInventory\Model\ResourceModel\Stock\Item\StockItemCriteriaMapper::mapStockStatus()이 트리거됩니다.

이 매퍼에는 구식 컬렉션과 같이 작동 할 수있는 \Magento\Framework\DB\Select이 포함되어 있습니다. 맵퍼 메소드의 이름은 기준 data 배열 색인과 관련됩니다. 따라서 $this->data['custom_field']을 추가하면 매퍼 함수는 mapCustomField()이어야합니다.

필드에 대해 특정 매퍼 기능이있는 경우 매퍼는 mapped fields으로 필터링을 시도합니다.