public function mapFilter($query, $filter)
{
foreach ((array) $filter as $key => $value) {
$field = $this->getDefinition()->getField($key);
if (!$field) {
continue;
}
$columns = $field->getFieldType()->getColumns();
if (1 < count($columns)) {
foreach ($columns as $idx => $column) {
$filter = 'filterBy' . ucfirst($column->getName());
if (method_exists($query, $filter)) {
$namedIndex = ucfirst($column->getName());
if (0 === strpos($namedIndex, $key)) {
$namedIndex = substr($namedIndex, strlen($key));
}
$valueToSet = isset($value[$idx]) ? $value[$idx] : $value[$namedIndex];
if ('integer' === $column->getPhpDataType()) {
$valueToSet = (int) $valueToSet;
}
$query->{$filter}($valueToSet);
}
}
} else {
$column = $columns[0];
$filter = 'filterBy' . ucfirst($column->getName());
$valueToSet = $value;
if ('integer' === $column->getPhpDataType()) {
$valueToSet = (int) $valueToSet;
}
$query->{$filter}($valueToSet);
}
}
}