我有两个实体:客户端和用户。可以将用户分配给客户端(多对多;一个用户可以管理多个客户端,客户端可以由多个用户管理)。在我的应用程序中,我有一个客户列表。有没有办法使用Doctrine在列表顶部显示没有分配用户的客户端?或者我应该在PHP中只使用findAll()和排序?
编辑:基本上,通过创建@ORM关系,我在MySQL中有3个表: clients、users和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的方式来实现。这个是可能的吗?
发布于 2015-10-15 21:32:07
它应该可以通过特定的方法直接在您的存储库中使用:
public function findClientOrderedByUser()
{
$qb = $this->createQueryBuilder('c')
->select('c')
/***/
->orderBy('c.user', 'DESC');
return $qb->getQuery()->getResult();
}
希望它能帮助你
发布于 2015-10-15 21:31:22
如果我没理解错的话,这是一个非常基本的问题。您应该添加一个ClientRepository类,并在query.You中添加一个使用ORDER BY的自定义函数,这样就可以使用DQL或querybuilder构建此查询。可以在here中找到一个很接近的例子。
https://stackoverflow.com/questions/33149569
复制相似问题