/** * Apply fulltext filters * * @param DbCollection $collection * @param Filter $filter * @return void */ public function apply(DbCollection $collection, Filter $filter) { $columns = $this->getFulltextIndexColumns($collection, $collection->getMainTable()); if (!$columns) { return; } $collection->getSelect()->where('MATCH(' . implode(',', $columns) . ') AGAINST(?)', $filter->getValue()); }
/** * @return \PHPUnit_Framework_MockObject_MockObject */ protected function getCriteriaBuilder() { $criteriaBuilder = $this->getMockBuilder('Magento\\Framework\\Api\\Search\\SearchCriteriaBuilder')->setMethods(['addFilter', 'create', 'setRequestName'])->disableOriginalConstructor()->getMock(); $this->filter = new \Magento\Framework\Api\Filter(); $this->filter->setField('price_dynamic_algorithm'); $this->filter->setValue(1); $criteriaBuilder->expects($this->once())->method('addFilter')->with($this->filter); $criteria = $this->getMock('Magento\\Framework\\Api\\Search\\SearchCriteria', [], [], '', false); $criteriaBuilder->expects($this->once())->method('create')->willReturn($criteria); $criteria->expects($this->once())->method('setRequestName')->withConsecutive(['catalog_view_container'])->willThrowException(new \Exception('setRequestName', 333)); return $criteriaBuilder; }
public function testApply() { $filter = new Filter(); $filter->setValue('test'); $this->collectionAbstractDbMock->expects($this->any())->method('getMainTable')->willReturn('testTable'); $this->collectionAbstractDbMock->expects($this->once())->method('getConnection')->willReturn($this->connectionMock); $this->connectionMock->expects($this->any())->method('select')->willReturn($this->selectMock); $this->connectionMock->expects($this->once())->method('getIndexList')->willReturn([['INDEX_TYPE' => 'FULLTEXT', 'COLUMNS_LIST' => ['col1', 'col2']]]); $this->selectMock->expects($this->once())->method('getPart')->willReturn([]); $this->selectMock->expects($this->once())->method('where')->willReturn(null); $this->collectionAbstractDbMock->expects($this->exactly(2))->method('getSelect')->willReturn($this->selectMock); $this->fulltextFilter->apply($this->collectionAbstractDbMock, $filter); }
/** * Apply fulltext filters * * @param Collection $collection * @param Filter $filter * @return void */ public function apply(Collection $collection, Filter $filter) { if (!$collection instanceof AbstractDb) { throw new \InvalidArgumentException('Database collection required.'); } /** @var SearchResult $collection */ $mainTable = $collection->getMainTable(); $columns = $this->getFulltextIndexColumns($collection, $mainTable); if (!$columns) { return; } $columns = $this->addTableAliasToColumns($columns, $collection, $mainTable); $collection->getSelect()->where('MATCH(' . implode(',', $columns) . ') AGAINST(?)', $filter->getValue()); }
/** * {@inheritdoc} */ public function addFilter(\Magento\Framework\Api\Filter $filter) { if (isset($this->addFilterStrategies[$filter->getField()])) { $this->addFilterStrategies[$filter->getField()]->addFilter($this->getCollection(), $filter->getField(), [$filter->getConditionType() => $filter->getValue()]); } else { parent::addFilter($filter); } }
/** * {@inheritdoc} */ public function addFilter(\Magento\Framework\Api\Filter $filter) { $field = $filter->getField(); if (in_array($field, ['review_id', 'created_at', 'status_id'])) { $filter->setField('rt.' . $field); } if (in_array($field, ['title', 'nickname', 'detail'])) { $filter->setField('rdt.' . $field); } if ($field === 'review_created_at') { $filter->setField('rt.created_at'); } parent::addFilter($filter); }
/** * @inheritdoc */ public function addFilter(\Magento\Framework\Api\Filter $filter) { $this->getCollection()->addFieldToFilter($filter->getField(), [$filter->getConditionType() => $filter->getValue()]); }
/** * @param FeedInterface $feed * @param Filter $filter * @return bool */ private function isFeedMatchesFilter(FeedInterface $feed, Filter $filter) { switch (strtolower($filter->getField())) { case 'id': $isMatches = $filter->getValue() === $feed->getId(); break; case 'title': $isMatches = strpos($feed->getTitle(), $filter->getValue()) !== false; break; case 'description': $isMatches = strpos($feed->getDescription(), $filter->getValue()) !== false; break; default: $isMatches = false; break; } return $isMatches; }
/** * Apply regular filters like collection filters * * @param AbstractDb $collection * @param Filter $filter * @return void */ public function apply(AbstractDb $collection, Filter $filter) { $collection->addFieldToFilter($filter->getField(), [$filter->getConditionType() => $filter->getValue()]); }