FilterRenderer: look up column aliases
...and allow to apply filter objects to ZfQueryBasedTable
This commit is contained in:
parent
f2ad5884ea
commit
f89fab2a27
|
@ -21,6 +21,9 @@ class FilterRenderer
|
||||||
/** @var Filter */
|
/** @var Filter */
|
||||||
private $filter;
|
private $filter;
|
||||||
|
|
||||||
|
/** @var array */
|
||||||
|
private $columnMap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* FilterRenderer constructor.
|
* FilterRenderer constructor.
|
||||||
* @param Filter $filter
|
* @param Filter $filter
|
||||||
|
@ -42,11 +45,38 @@ class FilterRenderer
|
||||||
|
|
||||||
public static function applyToQuery(Filter $filter, DbSelect $query)
|
public static function applyToQuery(Filter $filter, DbSelect $query)
|
||||||
{
|
{
|
||||||
|
if (! $filter->isEmpty()) {
|
||||||
$renderer = new static($filter, $query->getAdapter());
|
$renderer = new static($filter, $query->getAdapter());
|
||||||
|
$renderer->extractColumnMap($query);
|
||||||
$query->where($renderer->toDbExpression());
|
$query->where($renderer->toDbExpression());
|
||||||
|
}
|
||||||
|
|
||||||
return $query;
|
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
|
* @return string
|
||||||
*/
|
*/
|
||||||
|
@ -93,7 +123,7 @@ class FilterRenderer
|
||||||
|
|
||||||
protected function renderFilterExpression(FilterExpression $filter)
|
protected function renderFilterExpression(FilterExpression $filter)
|
||||||
{
|
{
|
||||||
$col = $filter->getColumn();
|
$col = $this->lookupColumnAlias($filter->getColumn());
|
||||||
$sign = $filter->getSign();
|
$sign = $filter->getSign();
|
||||||
$expression = $filter->getExpression();
|
$expression = $filter->getExpression();
|
||||||
|
|
||||||
|
|
|
@ -67,6 +67,12 @@ abstract class ZfQueryBasedTable extends Table
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function applyFilter(Filter $filter)
|
||||||
|
{
|
||||||
|
FilterRenderer::applyToQuery($filter, $this->getQuery());
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
protected function getSearchColumns()
|
protected function getSearchColumns()
|
||||||
{
|
{
|
||||||
return $this->searchColumns;
|
return $this->searchColumns;
|
||||||
|
|
Loading…
Reference in New Issue