按空ArrayCollection对实体排序?

时间:2015-10-15 13:15:17

标签: symfony doctrine many-to-many entity-relationship

我有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方式实现。这可能吗?

2 个答案:

答案 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