我有2个实体:客户端和用户。可以将用户分配给客户端(多对多;一个用户可以管理多个客户端,客户端可以由许多用户管理)。在我的应用程序中,我有客户列表。有没有办法使用Doctrine显示没有分配用户的客户端?或者我应该只使用findAll()并在PHP中排序?
编辑:基本上,通过创建@ORM \ ManyToMany关系,我在MySQL中有3个表:客户端,用户和clients_of_users(带有client_id和user_id列)。使用普通的SQL:
SELECT c.id, c.name, c.surname, COUNT(cof.user_id) as `Number of Users`
FROM clients c
LEFT JOIN clients_of_users cof ON c.id = cof.client_id
GROUP BY c.id
ORDER BY `Number of Users` ASC
通过此查询,我得到结果:
1 Name1 Surname1 0
6 Name6 Surname6 0
5 Name5 Surname5 1
7 Name7 Surname7 1
3 Name3 Surname3 2
4 Name4 Surname4 3
2 Name2 Surname2 4
所以耶!我有没有用户的客户。最后,我想让这个列表按客户端ID排序,但仍然没有用户的客户端,所以结果将如下所示:
1 Name1 Surname1 0
6 Name6 Surname6 0
2 Name2 Surname2 4
3 Name3 Surname3 2
4 Name4 Surname4 3
5 Name5 Surname5 1
7 Name7 Surname7 1
所以,所有这些我想用Symfony2 / Doctrine方式实现。这可能吗?
答案 0 :(得分:2)
应该可以直接在您的存储库中使用特定方法:
public function findClientOrderedByUser()
{
$qb = $this->createQueryBuilder('c')
->select('c')
/***/
->orderBy('c.user', 'DESC');
return $qb->getQuery()->getResult();
}
希望它可以帮到你
答案 1 :(得分:0)
如果我理解你,那么这是一个非常基本的问题。您应该添加ClientRepository类并添加在查询中使用ORDER BY的自定义函数。您可以使用DQL或querybuilder构建此查询。可以找到一个紧密的例子here。