У меня проблемы с запросом в symfony

У меня есть Entity тег [идентификатор, название] и Entity объявить [идентификатор, название].

Тег и объявление в отношении многие ко многим,

Итак, у меня есть ассоциация тег_объявления [id_объявления, идентификатор_тега]

У меня есть только репозиторий ярлык и репозиторий объявить, у меня нет репозитория annonce_tag

и я хочу сделать запрос, чтобы получить ТОП, например, 3 наиболее часто используемых тега

У кого есть предложения сделать этот запрос

/---------Обновлено----------/

Я пробовал это в репозитории тегов, но не работал

   return $query = $this->createQueryBuilder('t')
        ->select('t.id','count(a)')
        ->innerJoin('t.annonces', 'a')
        ->getQuery()->getResult();
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
4
0
56
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете написать 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();

Почему вы установили annonce_id 5? Я хочу видеть обязательные используемые теги во всех приложениях.

Khalil 03.04.2019 11:49

Я просто показывал вам, как запрашивать отношение «многие ко многим», поэтому я сказал изменить семантику и значения на то, что вам нужно. я обновил свой ответ

Jordan Olsen 03.04.2019 12:07

Вы могли бы сделать 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()

его возврат объявляется, но я хочу вернуть тег, который должен использоваться ВО ВСЕХ объявлениях

Khalil 03.04.2019 12:13

3 тега, которые используются во всех анонсах?

Robert 03.04.2019 12:39

да, я хочу видеть, что 3 тега должны использоваться в объявлениях, посмотрите, что я пробовал (я обновил вопрос)

Khalil 03.04.2019 12:47

в каждом или хотя бы в одном?

Robert 03.04.2019 12:54

не каждый не менее одного, например annonce1 имеет теги car,bike и annonce 2 имеют теги car, поэтому обязательно используемые теги - car

Khalil 03.04.2019 12:57
Ответ принят как подходящий

Вы можете сделать что-то вроде этого:

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(); правда?

Khalil 03.04.2019 12:48

Вам не хватает группы и заказа по частям :)

Vincent 03.04.2019 12:50

А также вы должны использовать getScalarResult вместо getResult

Vincent 03.04.2019 12:52

Другие вопросы по теме