Фильтр Magento 2 - PullRequest
       16

Фильтр Magento 2

0 голосов
/ 19 июня 2019

Я пытаюсь отфильтровать коллекцию товаров с помощью фильтра нескольких ИЛИ с помощью этого кода:

$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 и т. Д. ... не требуются, поэтому они могут быть пустыми для продуктов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...