Я использую Symfony 2 с Doctrine, и у меня есть две сущности, объединенные во многих отношениях. Предположим, у меня есть два объекта: Пользователь и группа, а связанные таблицы на db - это пользователи, группы и users_groups.DQL много для многих и счет
Я хочу получить 10 самых густонаселенных групп в DQL, но я не знаю синтаксиса для выполнения запросов в таблице соединений (users_groups). Я уже смотрел руководство по Doctrine, но я не нашел решение, я думаю, мне еще предстоит много узнать о DQL.
В простой SQL, который был бы:
select distinct group_id, count(*) as cnt from users_groups group by group_id order by cnt desc limit 10
Можете ли вы помочь мне перевести это DQL?
Update (классы):
/**
* Entity\E_User
*
* @ORM\Table(name="users")
* @ORM\Entity
*/
class E_User
{
/**
* @ORM\ManyToMany(targetEntity="E_Group", cascade={"persist"})
* @ORM\JoinTable(name="users_groups",
* joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id", onDelete="cascade")},
* inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id", onDelete="cascade")}
*)
*/
protected $groups;
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string $name
*
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
/* ... other attributes & getters and setters ...*/
}
/**
* Entity\E_Group
*
* @ORM\Table(name="groups")
* @ORM\Entity
*/
class E_Group
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string $name
*
* @ORM\Column(name="text", type="string", length=255)
*/
private $name;
/* ... other attributes & getters and setters ...*/
}
спасибо, проблема в том, что у объекта Group нет ассоциации, называемой пользователями. Поэтому я получаю исключение: [Semantical Error] строка 0, col 72 рядом с GROUP BY g.id ': Ошибка: у класса Entity \ E_Group нет ассоциации с именами пользователей. Я обновил вопрос с помощью реальных классов. Должен ли я добавить атрибут $ users для объекта E_Group для двунаправленного отношения «многие ко многим»? –
большое спасибо. Во всяком случае, у меня были двунаправленные отношения. Это был просто фиктивный запрос, чтобы понять, как он работает. еще раз спасибо –