columns = $columns; } public function setQuery(Query $query) { $this->query = $query; return $this; } public function rewriteCondition(Filter\Condition $condition, $relation = null) { $columnName = $condition->metaData()->get('columnName'); if (in_array($columnName, $this->columns, true)) { $relationPath = $condition->metaData()->get('relationPath'); if ($relationPath && $relationPath !== $this->query->getModel()->getTableAlias()) { $subject = $this->query->getResolver()->resolveRelation($relationPath)->getTarget(); } else { $subject = $this->query->getModel(); } /** @var ExpressionInterface $column */ $column = $subject->getColumns()[$columnName]; $expression = clone $column; $expression->setColumns($this->query->getResolver()->qualifyColumns( $this->query->getResolver()->requireAndResolveColumns( $expression->getColumns(), $subject ), $subject )); $condition->setColumn($this->query->getDb()->getQueryBuilder()->buildExpression($expression)); } } }