Magento – SearchCriteria with ‘OR’ filter

magento2search-criteria

I would like to get Cms Pages from repository using search criteria.
I need to filter title and content fields.
This is how I'm trying to do this:

$this->filterBuilder->setField('title');
$this->filterBuilder->setValue('%keyword%');
$this->filterBuilder->setConditionType('like');
$filters[] = $this->filterBuilder->create();

$this->filterBuilder->setField('content');
$this->filterBuilder->setValue('%keyword%');
$this->filterBuilder->setConditionType('like');
$filters[] = $this->filterBuilder->create();

$this->searchCriteriaBuilder->addFilters($filters);

and it gives me following SQL:

SELECT `main_table`.* FROM `cms_page` AS `main_table` WHERE (`title` = '%keyword%') AND (`content` = '%keyword%')

while what I need is:

SELECT `main_table`.* FROM `cms_page` AS `main_table` WHERE (`title` = '%keyword%') OR (`content` = '%keyword%')

Best Answer

You can try with,

$title = $this->filterBuilder->setField('title')
            ->setValue('%keyword%')
            ->setConditionType('like')
            ->create();

$content = $this->filterBuilder->setField('content')
            ->setValue('%keyword%')
            ->setConditionType('like')
            ->create();

$filterOr = $this->filterGroupBuilder
        ->addFilter($title)
        ->addFilter($content)
        ->create();

$searchCriteria = $this->searchCriteriaBuilder->setFilterGroups([$filterOr])->create();

$this->searchCriteriaBuilder->addFilters($searchCriteria);