Tôi đang sử dụng Symfony 2 với Doctrine và tôi có hai thực thể đã tham gia vào nhiều liên kết. Giả sử tôi có hai thực thể: Người dùng và Nhóm và các bảng có liên quan trên db là người dùng, nhóm và users_groups.DQL nhiều đến nhiều và đếm
Tôi muốn nhận được top 10 nhóm đông dân nhất trong DQL, nhưng tôi không biết cú pháp để thực hiện truy vấn trên bảng kết nối (users_groups). Tôi đã xem tài liệu hướng dẫn của Doctrine nhưng tôi không tìm thấy giải pháp, tôi đoán tôi vẫn còn rất nhiều điều để tìm hiểu về DQL.
Trong sql rõ ràng rằng sẽ là:
select distinct group_id, count(*) as cnt from users_groups group by group_id order by cnt desc limit 10
bạn có thể vui lòng giúp tôi dịch này để DQL?
Cập nhật (lớp):
/**
* 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 ...*/
}
cảm ơn, sự cố là thực thể Nhóm không có liên kết được gọi là người dùng. Vì vậy, tôi nhận được ngoại lệ: [Semantical Error] dòng 0, col 72 gần 's GROUP BY g.id': Lỗi: Class Entity \ E_Group không có liên kết tên người dùng. Tôi đã cập nhật câu hỏi với các lớp thực tế. Tôi có nên thêm thuộc tính $ users vào thực thể E_Group để tạo mối quan hệ nhiều-nhiều-hai chiều không? –
cảm ơn rất nhiều. Tôi đã kết thúc với một mối quan hệ hai chiều, anyway. Đó chỉ là một truy vấn giả để hiểu nó hoạt động như thế nào. cảm ơn lần nữa –