我使用Symfony的2學說,和我有兩個實體加入了一個多對多關聯。 比方說,我有兩個實體:用戶和組,並在數據庫的相關表是用戶,組和users_groups。DQL多對多和計數
我想在DQL中獲得排名前10位的人數最多的羣組,但我不知道在連接表(users_groups)上執行查詢的語法。我已經看過的教義手冊,但我沒有找到解決辦法,我想我還是有很多瞭解DQL。
在普通的SQL,這將是:
select distinct group_id, count(*) as cnt from users_groups group by group_id order by cnt desc limit 10
能否請你幫我翻譯這DQL?
更新(類):
/**
* 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 ...*/
}
謝謝,問題在於Group實體沒有一個叫做用戶的關聯。所以,我得到異常:語義錯誤] 0行,列72附近的GROUP BY g.id「:錯誤:類實體\ E_Group沒有協會命名的用戶。我用實際的課程更新了這個問題。我們要加一個$用戶屬性來E_Group實體進行雙向許多一對多的關係? – 2012-04-19 10:05:32
非常感謝。無論如何,我結束了雙向關係。這只是一個虛擬查詢,以瞭解它是如何工作的。再次感謝 – 2012-04-21 10:34:18