我有一个名为锦标赛的实体,用户可以注册参加。
两个实体之间的关系是ManyToMany,需要创建一个Symfony2视图,其中列出所有锦标赛,有或没有注册用户,以便他们可以加入。
这是我的DoctrineQueryBuilder
$em->createQueryBuilder('d')
->select('d, i, u')
->leftJoin('d.item','i')
->leftJoin('d.users','u')
->where('d.active = 1')
->andWhere('d.state = 1')
->orderBy('d.dateStart', 'ASC');
我还需要获得加入锦标赛的用户数量。
答案 0 :(得分:0)
<强>序言强>
有各种方法来实现你想要的。您可以创建一个子查询来进行计数,但更简单的解决方案是让doctrine为您处理这个问题。
下面描述的解决方案基于Doctrine lazy / eager loading功能。当学说加载一个实体时,它也会懒惰或急切地填充它的关联(默认是懒惰的)。
<强>解决方案强>
假设您的Tournament
实体将用户关联映射为ManyToMany
关系。您可以创建一个计算Tournament->users
的新方法。
ManyToMany关联将使用ArrayCollection填充实体属性(在本例中为$users
)。
一个名为countUsers
的方法可以实现以下示例实现:
...
class Tournament {
...
/**
* @ManyToMany(targetEntity="User")
* @JoinTable(name="tournament_users",
* joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="tournament_id", referencedColumnName="id"}
* )
**/
private $users;
...
public function countUsers(){
return $this->users->count();
}
在迭代锦标赛集合的视图中,只需调用$tournament->countUsers()
方法即可显示计数。
<强>参考文献:强>
ArrayCollection: http://www.doctrine-project.org/api/common/2.1/class-Doctrine.Common.Collections.ArrayCollection.html