2017-02-23 153 views
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()

這個mapper包含\Magento\Framework\DB\Select與我們能夠像舊式收藏一樣工作。 映射器方法的名稱與條件的data數組索引相關。所以如果你添加$this->data['custom_field'],映射函數應該是mapCustomField()

另請注意,如果該字段具有特定的映射器功能,則映射器將嘗試按mapped fields進行過濾。