diff --git a/src/Compat/FilterProcessor.php b/src/Compat/FilterProcessor.php index 0b091f1..2acc8f7 100644 --- a/src/Compat/FilterProcessor.php +++ b/src/Compat/FilterProcessor.php @@ -9,6 +9,7 @@ use ipl\Orm\Relation; use ipl\Orm\UnionQuery; use ipl\Sql\Expression; +use ipl\Sql\ExpressionInterface; use ipl\Sql\Filter\Exists; use ipl\Sql\Filter\NotExists; use ipl\Stdlib\Contract\Filterable; @@ -128,6 +129,20 @@ protected function requireAndResolveFilterColumns(Filter\Rule $filter, Query $qu throw new InvalidColumnException($columnName, $subject); } + $columns = $subject->getColumns(); + if (isset($columns[$columnName]) && $columns[$columnName] instanceof ExpressionInterface) { + $expression = clone $columns[$columnName]; + $expression->setColumns($resolver->qualifyColumns( + $resolver->requireAndResolveColumns( + $columns[$columnName]->getColumns(), + $subject + ), + $subject + )); + + $filter->setColumn($query->getDb()->getQueryBuilder()->buildExpression($expression)); + } + if ($relationPath !== $baseTable) { $query->utilize($relationPath); $this->madeJoins[$relationPath][] = $filter;