Я пытаюсь отфильтровать коллекцию товаров с помощью фильтра нескольких ИЛИ с помощью этого кода:
$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 результатов вместо двух.После анализа SQL-запроса, сгенерированного таблицей Magento eav, объединяются с 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-запросе я выполняю его, заменяя INNER JOIN на LEFT JOIN, это работает, я получил свои результаты.
Итак, мой вопрос: как я могу "заставить" magento оставить соединение вместо внутреннего?Или, может быть, это чистое совпадение, и настоящая причина не в левом / внутреннем соединении
Я не уточнил, но field_a, field_b и т. Д. ... не требуются, поэтому они могут быть пустыми для продуктов