예제 #1
0
 /**
  * {@inheritdoc}
  */
 public function build(RequestFilterInterface $filter)
 {
     switch ($filter->getType()) {
         case RequestFilterInterface::TYPE_BOOL:
             /** @var \Magento\Framework\Search\Request\Filter\Bool $filter */
             $queries = [];
             $must = $this->buildFilters($filter->getMust(), Select::SQL_AND);
             if (!empty($must)) {
                 $queries[] = $must;
             }
             $should = $this->buildFilters($filter->getShould(), Select::SQL_OR);
             if (!empty($should)) {
                 $queries[] = $this->wrapBrackets($should);
             }
             $mustNot = $this->buildFilters($filter->getMustNot(), Select::SQL_AND);
             if (!empty($mustNot)) {
                 $queries[] = '!' . $this->wrapBrackets($mustNot);
             }
             $query = $this->generateQuery($queries, Select::SQL_AND);
             break;
         case RequestFilterInterface::TYPE_TERM:
             /** @var \Magento\Framework\Search\Request\Filter\Term $filter */
             $query = $this->term->buildFilter($filter);
             break;
         case RequestFilterInterface::TYPE_RANGE:
             /** @var \Magento\Framework\Search\Request\Filter\Range $filter */
             $query = $this->range->buildFilter($filter);
             break;
         default:
             throw new \InvalidArgumentException(sprintf('Unknown filter type \'%s\'', $filter->getType()));
     }
     return $this->wrapBrackets($query);
 }
예제 #2
0
 /**
  * @param RequestFilterInterface|\Magento\Framework\Search\Request\Filter\Bool $filter
  * @param bool $isNegation
  * @return string
  */
 private function processBoolFilter(RequestFilterInterface $filter, $isNegation)
 {
     $must = $this->buildFilters($filter->getMust(), Select::SQL_AND, $isNegation);
     $should = $this->buildFilters($filter->getShould(), Select::SQL_OR, $isNegation);
     $mustNot = $this->buildFilters($filter->getMustNot(), Select::SQL_AND, !$isNegation);
     $queries = [$must, $this->conditionManager->wrapBrackets($should), $this->conditionManager->wrapBrackets($mustNot)];
     return $this->conditionManager->combineQueries($queries, Select::SQL_AND);
 }