如何在DQL、Doctrine ORM中写count(*) SQL

How to write count(*) SQL in DQL, Doctrine ORM

如何通过id获取数据库中的行数? SELECT count(*) FROM members; 没有性能问题。使用 entityManager 编写此查询的方法有哪些? 我正在使用 php version 5.6symfony 3

您必须使用您的 EntityRepository 在里面加一个函数,写成这样:

$queryBuilder = $this->_em->createQueryBuilder()
        ->select('COUNT(e)')
        ->from('AppBundle:Entity', 'e');

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

编辑:刚看到 Gregoire 的回答。那可行。但是,如果您已经拥有具有关系的实体,并且它已经初​​始化,则下面的内容将允许您在不对数据库进行额外查询的情况下获取此信息。


您可以使用关联并从集合中获取它(请参阅Working with Associations in the docs

class SomeEntity
{
    /**
     * @var Collection|Member[]
     */
    protected $members;

    // other properties

    // PHP >= 7 -> public function countMembers(): int
    public function countMembers()
    {
        return $this->getMembers()->count();
    }

    // PHP >= 7 -> public function getMembers(): Collection
    public function getMembers()
    {
        return $this->members;
    }

    // other getters/setters
}