Ben zaten yorum olarak açıklanan yöntemler, alternatif yöntemleri hakkında konuşmak iken, en azından sorunu çözmek için doğrudan bir yol yoktur ... Symfony 1.0 kullanılarak ve dolayısıyla 1.2 uskur inanıyoruz: senin {[(0)] için bu işlev eklemek } class:
public static function getTaggedArticles()
{
$c = new Criteria();
//some filters here, e.g. LIMIT or Criteria::IN array
$ahts = ArticleHasTagPeer::doSelectJoinAll($c);
$articles = array();
foreach($ahts as $aht)
{
if(!isset($articles[$aht->getArticleId()]))
{
$articles[$aht->getArticleId()] = $aht->getArticle();
}
$articles[$aht->getArticleId()]->addTag($aht->getTag());
}
return $articles;
}
$ahts
için kısa olduğu $article_has_tags
. Onlar zaten bu kolaylaştırmak için var yoksa (protected array $collTags
) addTag()
yöntemi ile birlikte Article
sınıfta etiketleri basit bir dizi oluşturun.
Bu daha sonra sadece tek bir SQL sorgusu çalıştırır, ama potansiyel olarak gereksiz nesnelerin yüzlerce nemlendirici bahsetmek filtre olmadan ciddi düşünün, ve bu önemli bir performans isabet. Yalnızca doSelectRS () çağrısı üzerine dayalı nemlendirmek için nasıl araştırma isteyebilirsiniz - onların JOIN
yöntemler işe nasıl için BlahPeer sınıfları incelemek, ve sonra this link özel {[yazmak için nasıl (0)]} yöntemleri.
Her iki şekilde de, yöntem anahtar olarak articleID ile makaleleri eşsiz bir dizi oluşturur - farklı bir sıralama düzeni gerekiyorsa, yine bu diziyi sıralamak ya da bunu oluşturmak gibi koleksiyonunuzu organize etmek için farklı bir dizi tuşunu kullanabilirsiniz.