diff --git a/library/vendor/ipl/Db/Zf1/FilterRenderer.php b/library/vendor/ipl/Db/Zf1/FilterRenderer.php index aa46e5ed..9812be24 100644 --- a/library/vendor/ipl/Db/Zf1/FilterRenderer.php +++ b/library/vendor/ipl/Db/Zf1/FilterRenderer.php @@ -21,6 +21,9 @@ class FilterRenderer /** @var Filter */ private $filter; + /** @var array */ + private $columnMap; + /** * FilterRenderer constructor. * @param Filter $filter @@ -42,11 +45,38 @@ class FilterRenderer public static function applyToQuery(Filter $filter, DbSelect $query) { - $renderer = new static($filter, $query->getAdapter()); - $query->where($renderer->toDbExpression()); + if (! $filter->isEmpty()) { + $renderer = new static($filter, $query->getAdapter()); + $renderer->extractColumnMap($query); + $query->where($renderer->toDbExpression()); + } + return $query; } + protected function lookupColumnAlias($column) + { + if (array_key_exists($column, $this->columnMap)) { + return $this->columnMap[$column]; + } else { + return $column; + } + } + + protected function extractColumnMap(DbSelect $query) + { + $map = []; + foreach ($query->getPart(DbSelect::COLUMNS) as $col) { + if ($col[1] instanceof DbExpr) { + $map[$col[2]] = (string) $col[1]; + } else { + $map[$col[2]] = $col[0] . '.' . $col[1]; + } + } + + $this->columnMap = $map; + } + /** * @return string */ @@ -93,7 +123,7 @@ class FilterRenderer protected function renderFilterExpression(FilterExpression $filter) { - $col = $filter->getColumn(); + $col = $this->lookupColumnAlias($filter->getColumn()); $sign = $filter->getSign(); $expression = $filter->getExpression(); diff --git a/library/vendor/ipl/Web/Table/ZfQueryBasedTable.php b/library/vendor/ipl/Web/Table/ZfQueryBasedTable.php index 54abd79d..573a4def 100644 --- a/library/vendor/ipl/Web/Table/ZfQueryBasedTable.php +++ b/library/vendor/ipl/Web/Table/ZfQueryBasedTable.php @@ -67,6 +67,12 @@ abstract class ZfQueryBasedTable extends Table ); } + public function applyFilter(Filter $filter) + { + FilterRenderer::applyToQuery($filter, $this->getQuery()); + return $this; + } + protected function getSearchColumns() { return $this->searchColumns;