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 ...*/
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist nicht einfach, ohne zu sehen, die tatsächlichen Klassen, sondern durch raten, Sie haben eine viele-zu-viele bidirektionale Beziehung:
UPDATE:
Du nicht müssen Verwendung einer bidirektionalen Beziehung, die Sie Abfragen können, die andere Weise herum:
Für diejenigen, die die Abfrage erstellen möchten, die mit Lehre ist
QueryBuilder
statt mit DQL direkt nehmen diese Lösung.Bitte beachten Sie, dass mein problem war nicht, die top-user-Gruppen, aber technisch das problem ist ziemlich ähnlich wie mir. Ich arbeite mit posts (wie der Artikel/blog-posts) und tags, die Hinzugefügt werden, um die Beiträge. Ich brauchte, um zu bestimmen, die eine Liste der verwandten Beiträge (identifiziert mit gleichen tags). Diese Liste musste nach Relevanz sortiert werden (die gleichen tags einem anderen Beitrag hat, desto relevanter ist).
Dies ist die Methode meiner
PostRepository
Klasse:Danke @Tom Imrei für Sie die Lösung. Auch die Antwort #26549597 war sehr hilfreich.