Estoy usando Symfony 2 con Doctrine, y tengo dos entidades unidas en una asociación muchos a muchos. Digamos que tengo dos entidades: Usuario y Grupo, y las tablas relacionadas en db son usuarios, grupos y usuarios_grupos.DQL muchos a muchos y cuente
Me gustaría obtener el top 10 grupos más poblados en DQL, pero no sé la sintaxis para realizar consultas en la tabla de unión (users_groups). Ya busqué en el manual de Doctrine, pero no encontré la solución, creo que todavía tengo mucho que aprender sobre DQL.
en SQL claro que sería:
select distinct group_id, count(*) as cnt from users_groups group by group_id order by cnt desc limit 10
puede usted por favor me ayude a traducir esto a DQL?
Actualizar (clases):
/**
* 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 ...*/
}
gracias, el problema es que la entidad del grupo no tiene una asociación llamada usuarios. De modo que obtengo la excepción: [Error semántico] línea 0, col 72 cerca de GROUP BY g.id ': Error: Class Entity \ E_Group no tiene asociación llamada users. Actualicé la pregunta con las clases reales. ¿Debo agregar un atributo $ users a la entidad E_Group para hacer la relación bidireccional de muchos a muchos? –
muchas gracias. Terminé con una relación bidireccional, de todos modos. Esa fue solo una consulta ficticia para entender cómo funciona. gracias de nuevo –