我需要为年份添加范围过滤器。我在我的模块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());
答案 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进行过滤。