Граф и группа с Propel - PullRequest
6 голосов
/ 06 марта 2012

В Учении я могу сделать:

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

        return $q->execute();        
}

Как я могу сделать то же самое в Propel в Symfony 1.4?

Ответы [ 3 ]

9 голосов
/ 10 марта 2012

Проклятый! Это проще, чем это!

Если вам нужно подсчитать строки результатов для данного запроса, вам нужно использовать метод завершения count(), в основном:

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

Для получения дополнительной информации прочитайте следующий раздел документации: http://www.propelorm.org/documentation/03-basic-crud.html#query_termination_methods

Если вы хотите добавить в свой запрос дополнительный столбец count или nb, представляющий агрегатные функции SQL, такие как COUNT или SUM, то вам следует использовать метод withColumn():

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

$results = $query->find();
2 голосов
/ 06 марта 2012

try:

public function getCount() 
    $c = new Criteria();
    $c->addAsColumn('count', 'count(name)');
    $c->addDescendingOrderByColumn($c->getColumnForAs('count')); 
    $c->addGroupByColumn('name');
    return self::doCount($c);
}

Здесь можно найти несколько хороших фрагментов информации о запросах propel -> http://snippets.symfony -project.org / snippets / tagged / critisities / order_by / date

1 голос
/ 07 марта 2012

Что-то как это:

$myRows = MyTableQuery::create()->
    addAsColumn('count', 'COUNT(name)')->
    addGroupByColumn('count')->
    addDescendingOrderByColumn('count')->
    find();

Я не уверен насчет GROUP BY - вам может понадобиться псевдоним или переопределить предложение COUNT. Попробуйте и посмотрите, что работает экспериментально :)

Вы действительно должны использовать автозаполняющуюся IDE, чтобы воспользоваться преимуществами Propel (и Doctrine в этом отношении) - ваши запросы будут намного легче создавать.

Мой обычный ответ обычно был бы похож на @ ManseUK, т. Е. Основан на классе Criteria - но он будет прекращен, когда появится Propel 2, так что, вероятно, будет хорошей идеей подготовить ваш код сейчас.

...