我最近解决了查询ManyToMany关系连接表的问题,解决方案与此答案相同,并且想知道它是如何工作的.假设我和ManyToMany之间有一个简单的关系,会有一个表格会自动在这里创建groupsteamgroups_team
团体实体
/**
* Groups
*
* @ORM\Table(name="groups")
* @ORM\Entity(repositoryClass="AppBundle\Model\Repository\GroupsRepository")
*/
class Groups {
/**
* @ORM\ManyToMany(targetEntity="Team", inversedBy="group")
*/
protected $team;
public function __construct() {
$this->team = new ArrayCollection();
}
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="groupname", type="string", length=255)
*/
private $groupname;
//obligatory getters and setters :)
Run Code Online (Sandbox Code Playgroud)
团队实体
/**
* Team
*
* @ORM\Table(name="team")
* @ORM\Entity(repositoryClass="AppBundle\Model\Repository\TeamRepository") …Run Code Online (Sandbox Code Playgroud) 我正在使用带有Doctrine的Symfony 2,并且我有两个实体加入了多对多关联.假设我有两个实体:User和Group,db上的相关表是users,groups和users_groups.
我想在DQL中获得前十大人口最多的组,但我不知道在连接表(users_groups)上执行查询的语法.我已经查看了Doctrine手册,但我没有找到解决方案,我想我还有很多东西可以学习DQL.
在普通的SQL中,它将是:
select distinct group_id, count(*) as cnt from users_groups group by group_id order by cnt desc limit 10
Run Code Online (Sandbox Code Playgroud)
你能帮我把它翻译成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", …Run Code Online (Sandbox Code Playgroud)