Symfony2:来自querybuilder的计数

Ale*_*s_D 3 doctrine symfony

我想知道我的表TABLE中的行数和属性名称="joe"

这里到目前为止我使用的代码,但我检索对象(这是不必要的,所以没有优化)

$repository = $this->getDoctrine()->getManager()->getRepository('MyBundle:TABLE');
$name = "joe";
$liste = $repository->findBy(array('name' => $name));
$nombre = count($liste);
Run Code Online (Sandbox Code Playgroud)

如何使用countbuilder使用count实现它?需要设置参数$ name.到目前为止我所看到的都没有像这样的参数,所以不知道它是如何工作的......(而且我想避免使用paginator)

谢谢.

Mik*_*lov 8

你可以这样实现:

$repository = $this->getDoctrine()->getManager()->getRepository('MyBundle:TABLE');
$name = "joe";
$qb = $repository->createQueryBuilder('t');
$qb->select('count(t.id)');
$qb->where('t.name = :name');
$qb->setParameter('name', $name);
$nombre = $qb->getQuery()->getSingleScalarResult();
Run Code Online (Sandbox Code Playgroud)

但好的做法是将此逻辑放入存储库类,因此您可以调用以下方法:

$nombre = $repository->countByName($name); 
Run Code Online (Sandbox Code Playgroud)

只需在TableRepository类中创建新方法:

public function countByName($name)
{
    $qb = $this->createQueryBuilder('t');
    $qb->select('count(t.id)');
    $qb->where('t.name = :name');
    $qb->setParameter('name', $name);

    return $qb->getQuery()->getSingleScalarResult();
}
Run Code Online (Sandbox Code Playgroud)