diff --git a/runtime/lib/query/ModelCriteria.php b/runtime/lib/query/ModelCriteria.php index ac498c8ab..7fde7e073 100644 --- a/runtime/lib/query/ModelCriteria.php +++ b/runtime/lib/query/ModelCriteria.php @@ -562,7 +562,8 @@ protected function configureSelectColumns() } // Add requested columns which are not withColumns - $columnNames = is_array($this->select) ? $this->select : array($this->select); + $columnNames = (array) $this->select; + // temporary store columns Alias or withColumn $asColumns = $this->getAsColumns(); $this->asColumns = array(); @@ -574,8 +575,15 @@ protected function configureSelectColumns() $this->addAsColumn('"' . $columnName . '"', $column[1]); } else { $this->addAsColumn($columnName, $asColumns[$columnName]); + // remove already added columns + unset($asColumns[$columnName]); } } + + // re-add all remaining columns which were not contained in select-columnNames + foreach($asColumns as $columnName => $columnAlias) { + $this->addAsColumn($columnName, $columnAlias); + } } /** diff --git a/test/testsuite/runtime/query/ModelCriteriaTest.php b/test/testsuite/runtime/query/ModelCriteriaTest.php index 8d32638d7..0781dd740 100644 --- a/test/testsuite/runtime/query/ModelCriteriaTest.php +++ b/test/testsuite/runtime/query/ModelCriteriaTest.php @@ -20,7 +20,7 @@ */ class ModelCriteriaTest extends BookstoreTestBase { - protected function assertCriteriaTranslation($criteria, $expectedSql, $expectedParams, $message = '') + protected function assertCriteriaTranslation(Criteria $criteria, $expectedSql, $expectedParams, $message = '') { $params = array(); $result = BasePeer::createSelectSql($criteria, $params); @@ -1319,6 +1319,23 @@ public function testWithColumnAndQuotes($clause, $alias, $selectTranslation) $this->assertCriteriaTranslation($c, $sql, $params, 'withColumn() adds a calculated column using quotes to the select clause'); } + public function testWithColumnAndSelect() + { + $c = new ModelCriteria('bookstore', 'Author'); + $c->join('Book'); + $c->withColumn('COUNT(Book.Id)', 'NbBooks'); + $c->select(array('FirstName', 'LastName')); + $collection = $c->find(); + + $this->assertThat($collection, $this->isInstanceOf('PropelCollection')); + + foreach($collection as $array) { + $this->assertArrayHasKey('FirstName', $array); + $this->assertArrayHasKey('LastName', $array); + $this->assertArrayHasKey('NbBooks', $array); + } + } + public function testWithColumnAndSelectColumns() { $c = new ModelCriteria('bookstore', 'Book');