/** * Add an additional filter expression to this query * * This notifies the repository about each required filter column. * * @param Filter $filter * * @return $this */ public function addFilter(Filter $filter) { $this->query->addFilter($this->repository->requireFilter($this->target, $filter, $this)); return $this; }
/** * Recurse the given filter, require each column for the given table and convert all values * * In case of a PostgreSQL connection, this applies LOWER() on the column and strtolower() * on the value if a COLLATE SQL-instruction is part of the resolved column. * * @param string $table The table being filtered * @param Filter $filter The filter to recurse * @param RepositoryQuery $query An optional query to pass as context * (Directly passed through to $this->requireFilterColumn) * @param bool $clone Whether to clone $filter first * * @return Filter The udpated filter */ public function requireFilter($table, Filter $filter, RepositoryQuery $query = null, $clone = true) { $filter = parent::requireFilter($table, $filter, $query, $clone); if ($filter->isExpression()) { $column = $filter->getColumn(); if (in_array($column, $this->columnsWithoutCollation) && strpos($column, 'LOWER') !== 0) { $filter->setColumn('LOWER(' . $column . ')'); $expression = $filter->getExpression(); if (is_array($expression)) { $filter->setExpression(array_map('strtolower', $expression)); } else { $filter->setExpression(strtolower($expression)); } } } return $filter; }