У меня есть Entity тег [идентификатор, название] и Entity объявить [идентификатор, название].
Тег и объявление в отношении многие ко многим,
Итак, у меня есть ассоциация тег_объявления [id_объявления, идентификатор_тега]
У меня есть только репозиторий ярлык и репозиторий объявить, у меня нет репозитория annonce_tag
и я хочу сделать запрос, чтобы получить ТОП, например, 3 наиболее часто используемых тега
У кого есть предложения сделать этот запрос
/---------Обновлено----------/
Я пробовал это в репозитории тегов, но не работал
return $query = $this->createQueryBuilder('t')
->select('t.id','count(a)')
->innerJoin('t.annonces', 'a')
->getQuery()->getResult();






Вы можете написать DQL-запрос соединения, как показано ниже, просто измените значения и семантику в соответствии с вашим сценарием:
$query = $repository->createQueryBuilder('t')
->select('COUNT(a) AS HIDDEN annonceNumber', 't')
->innerJoin('t.annonce', 'a')
->groupBy('a')
->orderBy('annonceNumber', 'DESC')
->limit(3)
->getQuery()->getResult();
Я просто показывал вам, как запрашивать отношение «многие ко многим», поэтому я сказал изменить семантику и значения на то, что вам нужно. я обновил свой ответ
Вы могли бы сделать DQL так
// in annouce repository
$query = $repository->createQueryBuilder('a')
->select('COUNT(t) AS HIDDEN usedTags', 'a')
->innerJoin('a.tag', 't')
->groupBy('t')
->orderBy('usedTags', 'DESC')
->limit(3)
->getQuery()->getResult();
hidden говорит доктрине использовать поле в запросе, но не возвращать его как массив в getResult()
его возврат объявляется, но я хочу вернуть тег, который должен использоваться ВО ВСЕХ объявлениях
3 тега, которые используются во всех анонсах?
да, я хочу видеть, что 3 тега должны использоваться в объявлениях, посмотрите, что я пробовал (я обновил вопрос)
в каждом или хотя бы в одном?
не каждый не менее одного, например annonce1 имеет теги car,bike и annonce 2 имеют теги car, поэтому обязательно используемые теги - car
Вы можете сделать что-то вроде этого:
SELECT tag.id, count(annonce.id) from App:Tag tag JOIN tag.annonces annonce GROUP BY tag.id ORDER BY count(annonce.id) desc
Вы получите упорядоченный список тегов с количеством связанных объявлений для каждого
Я преобразовал ваш код в этот return $query = $this->createQueryBuilder('t') ->select('t.id','count(a)') ->innerJoin('t.annonces', 'a ') ->getQuery()->getResult(); правда?
Вам не хватает группы и заказа по частям :)
А также вы должны использовать getScalarResult вместо getResult
Почему вы установили annonce_id 5? Я хочу видеть обязательные используемые теги во всех приложениях.