自定义过滤器以搜索条件。 Magento 2

时间:2017-02-23 12:09:21

标签: magento search filter criteria

我需要为年份添加范围过滤器。我在我的模块FullText \ Collection中重新定义了Magento类。我还在search_request.xml文件中进行了更改。我找到了代码,它对我有用:

$ skus = [             '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());

1 个答案:

答案 0 :(得分:0)

要将查询与其他表连接,您需要使用标准映射器。

作为示例,请查看\Magento\CatalogInventory\Model\ResourceModel\Stock\Item\StockItemCriteria::setStockStatus() - 此处启动了过滤器。

data数组中设置新项会触发映射器方法\Magento\CatalogInventory\Model\ResourceModel\Stock\Item\StockItemCriteriaMapper::mapStockStatus()

此映射器包含\Magento\Framework\DB\Select,我们可以像旧式集合一样工作。 mapper方法的名称与条件的data数组索引相关联。因此,如果您添加$this->data['custom_field'],则映射器函数应为mapCustomField()

另请注意,如果该字段具有特定的映射器功能,则映射器将尝试按mapped fields进行过滤。