Doctrine ORM:一次性计算相关实体数

时间:2014-09-14 14:33:33

标签: symfony doctrine-orm doctrine

我是用户实体和产品实体。

class User{
     /*
     * @ORM\OneToMany(targetEntity="Product", mappedBy="User")
     */
     private $Products;
}

class Product{

    /**
     * @ORM\ManyToOne(targetEntity="User", inversedBy="Products")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     */
    private $User;

}

现在我试图显示一个用户的html表,但我也希望显示每个用户的产品数量。 通过使用以下代码,我能够获得用户对象。

  $qb = $this->_em->createQueryBuilder();

  $qb->select('usr')
        ->from('User', 'usr');
  $query = $qb->getQuery();

但我不知道如何一次性获得产品数量。有什么帮助吗?

1 个答案:

答案 0 :(得分:2)

首先,如果要创建自定义查询,则应该为实体创建存储库类。然后,您可以通过将实体存储库作为服务注入到您需要的任何位置然后运行查询方法来运行该查询。

其次,您需要从doctrine查询返回结果以从数据库中检索任何内容。如果要确定返回的对象的数量,只需执行以下操作:

$qb = $this->_em->createQueryBuilder();
$qb->select('usr')
   ->from('User', 'usr');
$query = $qb->getQuery();

$count = count($query->getResult());

doctrine查询将返回与您的查询匹配的对象数组。如果您只想返回匹配记录的计数,请尝试以下方法:

$qb = $this->_em->createQueryBuilder();
$qb->select('count(id)')
   ->from('User', 'usr');
$query = $qb->getQuery();

$count = $query->getSingleScalarResult();

或者只是从User repository类中获取该用户的Product对象的数量:

$qb = $this->_em->createQueryBuilder('usr');
$qb->select('count(p.id)')
   ->from('usr.Products', 'p');

return $qb->getQuery()->getSingleScalarResult();