Nasıl uskur ORM kullanarak aşağıdaki SQL sorgu yazabilirsiniz?
SELECT species, COUNT(*) FROM Bird GROUP BY species;
Bu, sadece species
sütun ve bu türlerin sayısını seçin yana, anlamlı hidratlı Bird
nesnelerin neden olacak bir sorgu değildir. Yani a "raw" SQL query as Colin suggested, muhtemelen en iyi yolu, buraya gitmek istiyorum - ama sadece elde edilen PDOStatement
den veri almak, sonunda hidrat yok.
species
bir Species
tabloya bir referans olsaydı, oradan işe yarayabilir: hidrat Species
nesneler, türlerin başına kuş sayımları için ekstra bir kolonu ile. Eğer sürüm 1.2 kadar Symfony kullanırsanız büyük ölçüde Criteria
ile çalışan basitleştiren ve bir tek ek sütunu seçmek için yöntemleri vardır, ben çok, DbFinder plugin öneriyor:
$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";
}
Eğer Symfony 1.3 veya 1.4 kullanıyorsanız, François Zaniotto, DbFinder yaratıcısı, çok işlevselliğini taşıdık ve daha fazla katma 1,5, uskur için birlikte Propel 1.4 yükseltmesi gerektiğini, bu nedenle yukarıdaki kod ekstra bir eklenti olmadan uskur 1.5 çalışır.
Ben (üzerinde bir API belgesi orada görünmüyor) zor uskur Kriterleri tek bir belgeyi bulmak için bulduk bu yüzden genellikle symfony kitabın Bölüm 8'de listesini kullanmak; ama ben bu kapsamlı olsun ya da olmasın hiçbir fikrim yok.
Ama ne yapabilirim uskur doğrudan SQL beslemektir. Aşağıda, bir örnek modifiye edilir 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);
Ben olabilir ama ben şimdiye kadar bu yolu kendim kullandım sanmıyorum.