Доктрина Symfony Счетчик отношений ManyToMany

У меня есть сущность User со связанной с ней сущностью «многие ко многим» (Wish), теперь мне нужны 10 лучших желаний, используя Symfony QueryBuilder.

Проблема здесь в том, что у меня нет прямого доступа к таблице/объекту/репозиторию ManyToMany, поскольку он автоматически создается и управляется Doctrine ORM.

Создание вручную OneToMany, ManyToOne Entity на самом деле не вариант, поскольку он нарушит существующий код (в основном автоматическое заполнение коллекций и его функции добавления/удаления)

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

некоторый код:

class User {
// .........
 /**
 * @ORM\ManyToMany(targetEntity = "App\Entity\Wish")
 */
private $wish;

public function __construct()
{
    $this->wish = new ArrayCollection(); // with get/set/add/remove etc
}
}


class Wish {
/**
 * @ORM\Id()
 * @ORM\GeneratedValue()
 * @ORM\Column(type = "integer")
 */
private $id;

/**
 * @ORM\Column(type = "string", length=255)
 */
private $name;
// ... get set etc
}

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

hoover_D 31.01.2019 16:23

@hoover_D как мне это сделать? соответствующие данные находятся в таблице отношений «user_wish», и у меня нет ни сущности, ни репозитория.

jac 31.01.2019 16:32

проверьте здесь документацию для сопоставления отношений symfony.com/doc/current/doctrine/associations.html, когда вы сделаете настройки. Будет проще сделать свой пользовательский репозиторий, здесь документы для него symfony.com/doc/3.3/doctrine/repository.html

hoover_D 31.01.2019 16:34

@hoover_D, если я что-то не упустил, это не решает мою проблему. у меня уже есть все это, но поскольку это автоматические отношения «многие ко многим», похоже, что таблицы соединений не существует. есть ли какой-нибудь (псевдо) код, который может прояснить ситуацию?

jac 31.01.2019 16:50

Наа, ты видишь это не с той стороны. Вам не нужно работать напрямую с таблицей соединений, Doctrine сделает это за вас. Таким образом, вы можете написать для него специальный геттер в User Entity. Скопируйте Getter для желаний внутри вашего User Entity и переименуйте его во что-то вроде «getWishesTopTen». Затем вы переписываете этот геттер так, чтобы он не выдавал вам все пожелания, а применял критерии, чтобы выдавать только 10 лучших. Критерии см. в этом руководстве (в примере это OneToMany-Relation, но он работает и с ManyToMany): symfonycasts.com/screencast/collections/…

Benjamin Kozlowski 31.01.2019 17:01

@BenjaminKozlowski дело в том, что дело не в пользователе. это примерно 10 лучших в мире. У меня нет пользователя, поэтому я борюсь, потому что мне не хватает точки входа для получения данных.

jac 31.01.2019 17:06

Ах хорошо. Итак, как определяется «Топ-10»?

Benjamin Kozlowski 31.01.2019 17:13

@BenjaminKozlowski определяется с помощью чего-то вроде SELECT wish_id, count(wish_id) AS c FROM user_wish GROUP BY wish_id в операторе sql в таблице соединений.

jac 31.01.2019 17:18

Итак, вам нужны пожелания, которые имеют наибольшее количество пользователей. Итак, сначала вам нужно добавить пользователей в свой Wish Entity. Тогда вы могли бы их посчитать. Взгляните сюда: gist.github.com/Окрамиус/3121916 Затем вы можете написать запрос для Wishes, который подсчитывает пользователей, связанных с ним.

Benjamin Kozlowski 31.01.2019 17:24

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

jac 31.01.2019 17:41

@BenjaminKozlowski, да, это не работает. что бы я ни делал, я не могу заставить построитель запросов принять выбор пользователей. сейчас я буду использовать статический SQL-запрос

jac 01.02.2019 09:40
Стоит ли изучать 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 и хотите разрабатывать...
0
11
527
0

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