From 99321d556e5e1cd4446957f82cad3bef7849bdde Mon Sep 17 00:00:00 2001 From: Ali Hammad Date: Sat, 18 Oct 2014 02:12:08 +0500 Subject: [PATCH] Removed extra dot from '.columnName' if tableAlias was not present and added the ability to reference nested object from doctrine resultset --- src/ZfTable/Cell.php | 21 +++++++++++++------ src/ZfTable/Source/DoctrineQueryBuilder.php | 23 ++++++++++----------- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/ZfTable/Cell.php b/src/ZfTable/Cell.php index 0f1e1c6..1721269 100644 --- a/src/ZfTable/Cell.php +++ b/src/ZfTable/Cell.php @@ -87,14 +87,14 @@ public function render($type = 'html') if (is_array($row) || $row instanceof \ArrayAccess) { $value = (isset($row[$this->getHeader()->getName()])) ? $row[$this->getHeader()->getName()] : ''; + // doctrine result array check + if (empty($value) && isset($row[$this->getHeader()->getTableAlias()])) { + $obj = $row[$this->getHeader()->getTableAlias()]; + $value = $this->extractFromObject($obj, $this->getHeader()->getName()); + } } elseif (is_object($row)) { $headerName = $this->getHeader()->getName(); - $methodName = 'get' . ucfirst($headerName); - if (method_exists($row, $methodName)) { - $value = $row->$methodName(); - } else { - $value = (property_exists($row, $headerName)) ? $row->$headerName : ''; - } + $value = $this->extractFromObject($row, $headerName); } foreach ($this->decorators as $decorator) { @@ -112,4 +112,13 @@ public function render($type = 'html') return $value; } } + + protected function extractFromObject($obj, $name) + { + $methodName = 'get' . ucfirst($name); + if (method_exists($obj, $methodName)) { + return $obj->$methodName(); + } + return (property_exists($obj, $name)) ? $obj->$name : ''; + } } diff --git a/src/ZfTable/Source/DoctrineQueryBuilder.php b/src/ZfTable/Source/DoctrineQueryBuilder.php index 4223da4..40f312a 100644 --- a/src/ZfTable/Source/DoctrineQueryBuilder.php +++ b/src/ZfTable/Source/DoctrineQueryBuilder.php @@ -1,10 +1,10 @@ paginator) { - $this->order(); - $adapter = new DoctrineAdapter(new ORMPaginator($this->query)); - $this->paginator = new Paginator($adapter); - $this->initPaginator(); + $adapter = new DoctrineAdapter(new ORMPaginator($this->query)); + $this->paginator = new Paginator($adapter); + $this->initPaginator(); } return $this->paginator; } - - protected function order() { $column = $this->getParamAdapter()->getColumn(); - $order = $this->getParamAdapter()->getOrder(); + $order = $this->getParamAdapter()->getOrder(); if (!$column) { return; } - $header = $this->getTable()->getHeader($column); + $header = $this->getTable()->getHeader($column); $tableAlias = ($header) ? $header->getTableAlias() : 'q'; if ($column) { - $this->query->orderBy($tableAlias.'.'.$column, $order); + if (!empty($tableAlias)) { + $column = $tableAlias . '.' . $column; + } + $this->query->orderBy($column, $order); } } - public function getQuery() { return $this->query;