2009-06-01 112 views

回答

0

我發現它很難找到標準的Propel單個文檔(似乎沒有成爲它的API文檔),所以我通常用在symfony的書的第八章的清單;但我不知道這是否全面。

但您可以做的是直接將SQL餵給Propel。從一個例子中http://propel.phpdb.org/docs/user_guide/chapters/FindingObjects.html修改如下:

$con = Propel::getConnection(DATABASE_NAME); 

    // if not using a driver that supports sub-selects 
    // you must do a cross join (left join w/ NULL) 
    $sql = "SELECT species, COUNT(*) FROM Bird GROUP BY species"; 

    $stmt = $con->createStatement(); 
    $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_NUM); 

    return parent::populateObjects($rs); 

我,我曾經這樣使用它自己,雖然我可能不覺得做。

1
$c = new Criteria(); 
$c->addAsColumn('cnt', "count(*)"); 
self::addSelectColumns($c); 
$c->addGroupByColumn(BirdPeer::SPECIES); 

但溜溜需要做定製的保溼,如果你需要得到COUNT(*),以您的填充物。

+0

我該如何運行此標準,以及如何進行自定義保溼? – NobleUplift 2013-11-15 18:22:53

2

這不是一個查詢會導致有意義的水合Bird對象,因爲您只選擇species列和這些物種的計數。所以a "raw" SQL query as Colin suggested可能是最好的方式去這裏 - 但最後不要保溼,只需從得到的PDOStatement獲得數據。

如果species是一個Species表的引用,你可以從那裏工作:水合物Species對象,以每種鳥類計數一個額外的列。如果您使用的Symfony高達1.2版本,我強烈建議DbFinder plugin,因爲它大大簡化了Criteria工作,並且有方法來選擇單個輔助柱:

$speciesQuery = DbFinder::from('Species')-> 
    join('Bird')-> 
    groupBy('Bird.Id')-> 
    withColumn('COUNT(Bird.Id)', 'NbBirds'); 

foreach ($speciesQuery->find() as $species) { 
    echo $species->getName() . ": " . $species->getNbBirds() . " birds\n"; 
} 

如果使用Symfony的1.3或1.4,您應該將捆綁的Propel 1.4升級到Propel 1.5,其中DbFinder的創建者FrançoisZaniotto移植了其大部分功能並增加了更多功能,因此上述代碼在Propel 1.5中無需額外插件。

相關問題