diff --git a/src/Doctrine/Common/Filter/SearchFilterInterface.php b/src/Doctrine/Common/Filter/SearchFilterInterface.php index 177289b473..1885cf59a9 100644 --- a/src/Doctrine/Common/Filter/SearchFilterInterface.php +++ b/src/Doctrine/Common/Filter/SearchFilterInterface.php @@ -70,4 +70,14 @@ interface SearchFilterInterface * @var string Finds fields that are starting with the word case-insensitive */ public const STRATEGY_IWORD_START = 'iword_start'; + + /** + * @var string Finds fields that match the user-specified pattern + */ + public const STRATEGY_PATTERN = 'pattern'; + + /** + * @var string Finds fields that match the user-specified pattern case-insensitive + */ + public const STRATEGY_IPATTERN = 'ipattern'; } diff --git a/src/Doctrine/Odm/Filter/SearchFilter.php b/src/Doctrine/Odm/Filter/SearchFilter.php index c370e57dcf..0d85e513a1 100644 --- a/src/Doctrine/Odm/Filter/SearchFilter.php +++ b/src/Doctrine/Odm/Filter/SearchFilter.php @@ -276,6 +276,7 @@ private function getEqualityMatchStrategyValue(string $strategy, string $field, self::STRATEGY_START => new Regex("^$quotedValue", $caseSensitive ? '' : 'i'), self::STRATEGY_END => new Regex("$quotedValue$", $caseSensitive ? '' : 'i'), self::STRATEGY_WORD_START => new Regex("(^$quotedValue.*|.*\s$quotedValue.*)", $caseSensitive ? '' : 'i'), + self::STRATEGY_PATTERN => throw new InvalidArgumentException(\sprintf('strategy %s is not implemented.', $strategy)), default => throw new InvalidArgumentException(\sprintf('strategy %s does not exist.', $strategy)), }; } diff --git a/src/Doctrine/Orm/Filter/SearchFilter.php b/src/Doctrine/Orm/Filter/SearchFilter.php index d0caccb94d..544d10b1c6 100644 --- a/src/Doctrine/Orm/Filter/SearchFilter.php +++ b/src/Doctrine/Orm/Filter/SearchFilter.php @@ -334,6 +334,10 @@ protected function addWhereByStrategy(string $strategy, QueryBuilder $queryBuild $wrapCase((string) $queryBuilder->expr()->concat("'% '", $keyValueParameter, "'%'")) ) ), + self::STRATEGY_PATTERN => $queryBuilder->expr()->like( + $wrapCase($aliasedField), + $wrapCase($keyValueParameter) + ), default => throw new InvalidArgumentException(\sprintf('strategy %s does not exist.', $strategy)), }; }