Count and group-by with Propel

Johan Dannenberg picture Johan Dannenberg · Mar 6, 2012 · Viewed 11.9k times · Source

In Doctrine I can do:

public function getCount() 
{        
        $q = $this->createQuery('q')
            ->select('*')
            ->addSelect('count(q.name) as count')
            ->groupBy('q.name')
            ->orderBy('count DESC');

        return $q->execute();        
}

How can I do the same in Propel in Symfony 1.4?

Answer

William Durand picture William Durand · Mar 10, 2012

Damned! It's easier than that!

If you need to count result rows for a given query, you need to use the count() termination method, basically:

MyTableQuery::create()->count();

Read the following documentation section for more information: http://www.propelorm.org/documentation/03-basic-crud.html#query_termination_methods

If you want to add a count or nb extra column to your query which represent a SQL aggregate functions like COUNT or SUM, then you should use the withColumn() method:

$query = MyTableQuery::create()
    ->withColumn('COUNT(*)', 'Count')
    ->select(array('Name', 'Count'))
    ->groupByName()
    ->orderByCount()
    ;

$results = $query->find();