2011-10-18 5 views
1

特定の記事でタグの数を数えたいと思います。私は、多対多の関連により関係して2つのエンティティ(記事、タグ)持っている:MタグとDQLを使用してSymfony2の多対多関係を数える方法

//Bundle/Entity/Article.php 
/** 
* @ORM\ManyToMany(targetEntity="Tag") 
*/ 

private $tags; 

今私が持っているn個の記事を、私は知っているどのように多くの場合、特定したいと思いますタグが使用されています。

私はSymfony2とDoctrineの両方に比較的新しいです。問題は、私はどこにそのようなクエリ(私はそれがArticleRepositoryに存在するはずだが、それはTagRepositoryでそれを持っている意味があるだろうと推測する)と正しいテーブルに結合する方法を知っていないということです記事記事、記事タグ、タグ)。

答えて

2

私は考えることができる最も簡単な方法は、ちょうど条とタグ間の双方向の関係を設定することです:

class Article 
{ 
    /** 
    * @ORM\ManyToMany(targetEntity="Tag", inversedBy="articles") 
    */ 
    private $tags; 
} 

class Tag 
{ 
    /** 
    * @ORM\ManyToMany(targetEntity="Article", mappedBy="tags") 
    */ 
    private $articles; 
} 

次にあなたが$tag->getArticles()->count();を使用します(標準のゲッターとセッターを設定したと仮定した場合)ことができ、 $tagは管理タグエンティティで、そのタグに添付されている記事の数を取得します。これは、ToMany関係プロパティを設定するとき、DoctrineがDoctrine\Common\Collections\ArrayCollectionのインスタンスを使用するために機能します。ソースhereをチェックしてください。

また、このルートに行く場合は、所有側と逆側を選択したドキュメントhereを必ず読んでください。

+0

私は実際に少し問題を発見しました。タグをフェッチする方法では、多くのSQLリクエストが発生します。このクエリは本当に "Doctrine Style"なのかどうかは分かりませんが、より良い結果が得られます: '$ results = $ this-> getDoctrine() - > getEntityManager() - > createQuery( 'SELECT t.title、COUNT(t.id )FROM TridexTribloxBundle:タグt.idicles b GROUP BY t.id ') - > getResult(); ' – schneida

2

あなたが特定のarticle..letsを使用することにより、タグの数を数えることができる文書番号= 5言う:

$query=$em->createQuery("SELECT count(t.id) FROM Tag t WHERE ?1 MEMBER OF t.articles"); 
$query->setParameter(1,5); 
$result = $query->getSingleScalarResult(); 

これは私だけ= 5

文書番号条エンティティ内のタグの数を示します
関連する問題