Commit 374845a7 authored by Jens Segers's avatar Jens Segers Committed by GitHub

Merge pull request #1186 from lintaba/patch-2

Aggregation shouldn't mutate querybuilder
parents 03f157ee f3bc6e45
...@@ -422,18 +422,28 @@ class Builder extends BaseBuilder ...@@ -422,18 +422,28 @@ class Builder extends BaseBuilder
public function aggregate($function, $columns = []) public function aggregate($function, $columns = [])
{ {
$this->aggregate = compact('function', 'columns'); $this->aggregate = compact('function', 'columns');
$previousColumns = $this->columns;
// We will also back up the select bindings since the select clause will be
// removed when performing the aggregate function. Once the query is run
// we will add the bindings back onto this query so they can get used.
$previousSelectBindings = $this->bindings['select'];
$this->bindings['select'] = [];
$results = $this->get($columns); $results = $this->get($columns);
// Once we have executed the query, we will reset the aggregate property so // Once we have executed the query, we will reset the aggregate property so
// that more select queries can be executed against the database without // that more select queries can be executed against the database without
// the aggregate value getting in the way when the grammar builds it. // the aggregate value getting in the way when the grammar builds it.
$this->columns = null;
$this->aggregate = null; $this->aggregate = null;
$this->columns = $previousColumns;
$this->bindings['select'] = $previousSelectBindings;
if (isset($results[0])) { if (isset($results[0])) {
$result = (array) $results[0]; $result = (array) $results[0];
return $result['aggregate']; return $result['aggregate'];
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment