diff --git a/laravel/database/query.php b/laravel/database/query.php index d3363a4a..494b9b4b 100644 --- a/laravel/database/query.php +++ b/laravel/database/query.php @@ -626,12 +626,12 @@ public function get($columns = array('*')) * Get an aggregate value. * * @param string $aggregator - * @param string $column + * @param array $columns * @return mixed */ - public function aggregate($aggregator, $column) + public function aggregate($aggregator, $columns) { - $this->aggregate = compact('aggregator', 'column'); + $this->aggregate = compact('aggregator', 'columns'); $sql = $this->grammar->select($this); @@ -660,7 +660,7 @@ public function paginate($per_page = 20, $columns = array('*')) // we have the count. list($orderings, $this->orderings) = array($this->orderings, null); - $page = Paginator::page($total = $this->count(), $per_page); + $page = Paginator::page($total = $this->count($columns), $per_page); $this->orderings = $orderings; @@ -818,14 +818,9 @@ public function __call($method, $parameters) if (in_array($method, array('count', 'min', 'max', 'avg', 'sum'))) { - if ($method == 'count') - { - return $this->aggregate(strtoupper($method), '*'); - } - else - { - return $this->aggregate(strtoupper($method), $parameters[0]); - } + if (count($parameters) == 0) $parameters[0] = '*'; + + return $this->aggregate(strtoupper($method), (array) $parameters[0]); } throw new \Exception("Method [$method] is not defined on the Query class."); diff --git a/laravel/database/query/grammars/grammar.php b/laravel/database/query/grammars/grammar.php index 90c0b69b..dc957071 100644 --- a/laravel/database/query/grammars/grammar.php +++ b/laravel/database/query/grammars/grammar.php @@ -93,7 +93,9 @@ protected function selects(Query $query) */ protected function aggregate(Query $query) { - $column = $this->wrap($query->aggregate['column']); + $column = $this->columnize($query->aggregate['columns']); + + if ($query->distinct and $column !== '*') $column = 'DISTINCT '.$column; return 'SELECT '.$query->aggregate['aggregator'].'('.$column.')'; }