我正在尝试使用以下代码使用多个OR过滤器过滤产品集:
$values = ['xxx','xxx'];
$filters = [];
$filters[] = $this->_filterBuilder
->setField('field_a')->setConditionType('in')
->setValue($values)
->create();
$filters[] = $this->_filterBuilder
->setField('field_b')
->setConditionType('in')
->setValue($values)
->create();
// two more filter like that
$filterGroup = $this->_filterGroupBuilder
->setFilters($filters)
->create();
$searchCriteria = $this->_searchCriteriaBuilder
->setFilterGroups([$filterGroup])
->create();
$products = $this->_productRepository->getList($searchCriteria)->getItems();
问题是集合返回0结果而不是两个结果。在分析了Magento eav表生成的sql查询后,使用INNER JOIN进行了如下连接:
INNER JOIN `catalog_product_entity_text` AS `at_field_b` ON (`at_field_b`.`row_id` = `e`.`row_id`) AND (`at_field_b`.`attribute_id` = '204') AND (`at_field_b`.`store_id` = 0)
如果在原始sql查询上我通过用LEFT JOIN替换INNER JOIN来执行它,那么我就得到了结果。
所以我的问题是我该如何“强制” magento左联接而不是内部联接?也许这纯粹是巧合,真正的原因不是左/内联接
我不精确,但是不要求field_a,field_b等,因此对于产品它们可以为空