Magento 2 filterBuilder左联接

时间:2019-06-19 07:18:20

标签: mysql collections magento2

我正在尝试使用以下代码使用多个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等,因此对于产品它们可以为空

0 个答案:

没有答案