Как посчитать отношения «многие ко многим» в Symfony2, используя DQL - PullRequest
1 голос
/ 18 октября 2011

Я бы хотел посчитать количество тегов для данной статьи. У меня есть две сущности (Article, Tag), которые связаны ассоциацией «многие ко многим»:

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

 private $tags;

Теперь у меня есть n статей с m тегами, и я хотел бы знать, как часто использовался определенный тег.

Я относительно новичок в Symfony2 и Doctrine. Проблема в том, что я не знаю, где разместить такой запрос (я думаю, он должен находиться в ArticleRepository, но, с другой стороны, имеет смысл иметь его в TagRepository) и как присоединиться к правильным таблицам (в этом кейс статьи, тэг article_tag).

Ответы [ 2 ]

2 голосов
/ 21 января 2014

Вы можете посчитать количество тегов, используя определенную статью ... скажем, идентификатор статьи = 5:

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

Это дает мне количество тегов в Article Entity только для идентификатора статьи = 5.

2 голосов
/ 18 октября 2011

Самый простой способ, который я могу придумать, это просто установить двунаправленную связь между Article и Tag:

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.Проверьте источник здесь .

Кроме того, если вы идете по этому маршруту, обязательно прочитайте документацию по выбору собственной и обратной стороны здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...