Ich benutze Symfony 2 mit Doctrine, und ich habe zwei Entitäten in einer Verknüpfung von vielen zu vielen verbunden. Angenommen, ich habe zwei Entitäten: Benutzer und Gruppe, und die zugehörigen Tabellen in db sind Benutzer, Gruppen und Benutzergruppen.DQL viele zu viele und zählen
Ich würde gerne die Top 10 am meisten besetzten Gruppen in DQL, aber ich weiß nicht die Syntax, um Abfragen für die Join-Tabelle (users_groups) durchzuführen. Ich habe bereits das Doktrin-Handbuch gelesen, aber ich habe die Lösung nicht gefunden. Ich denke, ich muss noch eine Menge über DQL lernen.
Im Klar SQL, das 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 diese dql zu übersetzen bitte helfen?
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 ...*/
}
Danke, das Problem ist, dass Gruppenentität keine Verknüpfung namens Benutzer hat. So bekomme ich die Ausnahme: [Semantischer Fehler] Zeile 0, Spalte 72 in der Nähe von 'GROUP BY g.id': Fehler: Klassen Entity \ E_Group hat keine Assoziation namens Benutzer. Ich habe die Frage mit den tatsächlichen Klassen aktualisiert. Soll ich der Entität E_Group das Attribut $ users hinzufügen, um die bidirektionale Viele-zu-Viele-Beziehung herzustellen? –
vielen dank. Ich hatte sowieso eine bidirektionale Beziehung. Das war nur eine Dummy-Abfrage, um zu verstehen, wie es funktioniert. Danke noch einmal –