Одним из преимуществ ORM по сравнению с шаблоном ActiveRecord является то, что вам не нужно создавать новую сущность для объединяемых таблиц.
Так что здесь, когда вы используете Doctrine, таблица user_groups
будет отображенас обеих сторон.
Это означает, что вы не можете получить прямой доступ к таблице user_groups.Если вы не используете нативный sql, против которого я настоятельно советую.
Так что лучший способ справиться с вашей ситуацией - это использовать findOneBy($group_id)
в групповом репо и получить от него пользователей.Это теоретически правильный способ его реализации.
- РЕДАКТИРОВАТЬ - Для вашего комментария:
Да, я согласен, что из чистого БД POV его более эффективным.
Но вы не сможете сделать это без встроенного запроса, так как DQL, построитель запросов и все, что связано с доктриной, использует Entities для выполнения действий, и, поскольку вы используете ORM по своему замыслу, у вас не будетсущность для таблиц соединения.
В противном случае единственный способ - изменить отображение с a many to many relation from user to groups using join table
на a one-to-many from users to user_groups and a many-to-one from user_groups to groups
.Таким образом, у вас будет сущность для user_groups
.
Тогда вы сможете напрямую использовать эту сущность для получения пользователей.
Несмотря на то, что это хак, технически и теоретически некорректно использоватькак это.Если, конечно, у соединительного стола нет других обязанностей.