Używam Symfony 2 z Doctrine, i mam dwie jednostki połączone w wiele do wielu stowarzyszeń. Załóżmy, że mam dwie jednostki: użytkownik i grupę, a powiązane tabele na db to użytkownicy, grupy i grupy users_groups.DQL wiele do wielu i liczyć
Chciałbym uzyskać 10 najbardziej zaludnionych grup w DQL, ale nie znam składni do wykonywania zapytań w tabeli join (users_groups). Już zapoznałem się z podręcznikiem do Doctrine, ale nie znalazłem rozwiązania, myślę, że wciąż muszę się dużo nauczyć o DQL.
w prostym SQL, które byłyby:
select distinct group_id, count(*) as cnt from users_groups group by group_id order by cnt desc limit 10
Czy możesz mi pomóc przetłumaczyć to DQL?
Aktualizuj (klas):
/**
* 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 ...*/
}
dzięki, problem polega na tym, że encja Grupy nie ma powiązania zwanego użytkownikiem. Dostaję wyjątek: [Błąd semantyczny] linia 0, col 72 w pobliżu GROUP BY g.id ': Błąd: Klasa Entity \ E_Group nie ma powiązania o nazwie użytkownicy. Uaktualniłem pytanie do faktycznych klas. Czy mam dodać atrybut $ users do encji E_Group, aby utworzyć dwukierunkową relację wiele do wielu? –
wielkie dzięki. Ostatecznie skończyłem z dwukierunkową relacją. To było tylko fałszywe zapytanie, aby zrozumieć, jak to działa. dzięki jeszcze raz –