DQL viele zu viele und zu zählen

Ich bin mit Symfony 2 mit der Lehre, und ich habe zwei Entitäten, die sich in einer viele zu viele Vereins.
Sagen wir, ich habe zwei Entitäten: Benutzer und Gruppe, sowie die zugehörigen Tabellen auf der db sind, werden die Benutzer, Gruppen und users_groups.

Ich würde gerne die top 10 der meist bevölkerten Gruppen in DQL, aber ich weiß nicht, die syntax zum ausführen von Abfragen auf die join-Tabelle (users_groups). Ich sah schon auf der Lehre Handbuch, aber ich habe nicht die Lösung gefunden, ich glaube, ich habe noch eine Menge zu lernen über DQL.

In plain sql wäre:

select distinct group_id, count(*) as cnt from users_groups group by group_id order by cnt desc limit 10

Können Sie mir bitte helfen zu übersetzen, um DQL?

Update (Klassen):

/**
 * 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 ...*/
}
Schreibe einen Kommentar