Skip to content

Commit 544a4de

Browse files
committed
Fix or filter for recieving arrays
1 parent dea3201 commit 544a4de

File tree

1 file changed

+55
-15
lines changed

1 file changed

+55
-15
lines changed

src/Filter/OrSearchFilter.php

Lines changed: 55 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -188,29 +188,69 @@ protected function addWhereByStrategy(string $strategy, QueryBuilder $queryBuild
188188
switch ($strategy) {
189189
case null:
190190
case self::STRATEGY_EXACT:
191-
$queryBuilder
192-
->orWhere(sprintf($wrapCase('%s.%s') . ' = ' . $wrapCase(':%s'), $alias, $field, $valueParameter))
193-
->setParameter($valueParameter, $value);
191+
if (is_array($value)) {
192+
foreach ($value as $i=>$v) {
193+
$queryBuilder
194+
->orWhere(sprintf($wrapCase('%s.%s') . ' = ' . $wrapCase(':%s'), $alias, $field, $valueParameter . $i))
195+
->setParameter($valueParameter . $i, $v);
196+
}
197+
} else {
198+
$queryBuilder
199+
->orWhere(sprintf($wrapCase('%s.%s') . ' = ' . $wrapCase(':%s'), $alias, $field, $valueParameter))
200+
->setParameter($valueParameter, $value);
201+
}
194202
break;
195203
case self::STRATEGY_PARTIAL:
196-
$queryBuilder
197-
->orWhere(sprintf($wrapCase('%s.%s') . ' LIKE ' . $wrapCase('CONCAT(\'%%\', :%s, \'%%\')'), $alias, $field, $valueParameter))
198-
->setParameter($valueParameter, $value);
204+
if (is_array($value)) {
205+
foreach ($value as $i=>$v) {
206+
$queryBuilder
207+
->orWhere(sprintf($wrapCase('%s.%s') . ' LIKE ' . $wrapCase('CONCAT(\'%%\', :%s, \'%%\')'), $alias, $field, $valueParameter . $i))
208+
->setParameter($valueParameter . $i, $v);
209+
}
210+
} else {
211+
$queryBuilder
212+
->orWhere(sprintf($wrapCase('%s.%s') . ' LIKE ' . $wrapCase('CONCAT(\'%%\', :%s, \'%%\')'), $alias, $field, $valueParameter))
213+
->setParameter($valueParameter, $value);
214+
}
199215
break;
200216
case self::STRATEGY_START:
201-
$queryBuilder
202-
->orWhere(sprintf($wrapCase('%s.%s') . ' LIKE ' . $wrapCase('CONCAT(:%s, \'%%\')'), $alias, $field, $valueParameter))
203-
->setParameter($valueParameter, $value);
217+
if (is_array($value)) {
218+
foreach ($value as $i=>$v) {
219+
$queryBuilder
220+
->orWhere(sprintf($wrapCase('%s.%s') . ' LIKE ' . $wrapCase('CONCAT(:%s, \'%%\')'), $alias, $field, $valueParameter . $i))
221+
->setParameter($valueParameter . $i, $v);
222+
}
223+
} else {
224+
$queryBuilder
225+
->orWhere(sprintf($wrapCase('%s.%s') . ' LIKE ' . $wrapCase('CONCAT(:%s, \'%%\')'), $alias, $field, $valueParameter))
226+
->setParameter($valueParameter, $value);
227+
}
204228
break;
205229
case self::STRATEGY_END:
206-
$queryBuilder
207-
->orWhere(sprintf($wrapCase('%s.%s') . ' LIKE ' . $wrapCase('CONCAT(\'%%\', :%s)'), $alias, $field, $valueParameter))
208-
->setParameter($valueParameter, $value);
230+
if (is_array($value)) {
231+
foreach ($value as $i=>$v) {
232+
$queryBuilder
233+
->orWhere(sprintf($wrapCase('%s.%s') . ' LIKE ' . $wrapCase('CONCAT(\'%%\', :%s)'), $alias, $field, $valueParameter . $i))
234+
->setParameter($valueParameter . $i, $v);
235+
}
236+
} else {
237+
$queryBuilder
238+
->orWhere(sprintf($wrapCase('%s.%s') . ' LIKE ' . $wrapCase('CONCAT(\'%%\', :%s)'), $alias, $field, $valueParameter))
239+
->setParameter($valueParameter, $value);
240+
}
209241
break;
210242
case self::STRATEGY_WORD_START:
211-
$queryBuilder
212-
->orWhere(sprintf($wrapCase('%1$s.%2$s') . ' LIKE ' . $wrapCase('CONCAT(:%3$s, \'%%\')') . ' OR ' . $wrapCase('%1$s.%2$s') . ' LIKE ' . $wrapCase('CONCAT(\'%% \', :%3$s, \'%%\')'), $alias, $field, $valueParameter))
213-
->setParameter($valueParameter, $value);
243+
if (is_array($value)) {
244+
foreach ($value as $i=>$v) {
245+
$queryBuilder
246+
->orWhere(sprintf($wrapCase('%1$s.%2$s') . ' LIKE ' . $wrapCase('CONCAT(:%3$s, \'%%\')') . ' OR ' . $wrapCase('%1$s.%2$s') . ' LIKE ' . $wrapCase('CONCAT(\'%% \', :%3$s, \'%%\')'), $alias, $field, $valueParameter . $i))
247+
->setParameter($valueParameter . $i, $v);
248+
}
249+
} else {
250+
$queryBuilder
251+
->orWhere(sprintf($wrapCase('%1$s.%2$s') . ' LIKE ' . $wrapCase('CONCAT(:%3$s, \'%%\')') . ' OR ' . $wrapCase('%1$s.%2$s') . ' LIKE ' . $wrapCase('CONCAT(\'%% \', :%3$s, \'%%\')'), $alias, $field, $valueParameter))
252+
->setParameter($valueParameter, $value);
253+
}
214254
break;
215255
default:
216256
throw new InvalidArgumentException(sprintf('strategy %s does not exist.', $strategy));

0 commit comments

Comments
 (0)