2011-12-12 81 views

回答

0

您可以进行预先计数查询:

$count = $em->createQuery('SELECT count(s) FROM app\models\Quest s 
            LEFT JOIN s.que c 
            WHERE s.type=:type 
            AND c.id=:id) 
       ->setParameter('type', $sub); 
       ->setParameter('id', $id); 
       ->getSingleScalarResult(); 

或者你可以执行查询并返回结果数组的大小:

$quests = $q->getResult(); 
$count = count($quests); 

使用第一种方法,如果您需要计数以便您可以在实际检索对象之前做出决定。

1

另外一个可以看一下什么主义分页程序类做了一个查询对象来获取计数(这个形式给出最有可能是矫枉过正,虽然,但它回答您的问题):

public function count() 
{ 
if ($this->count === null) { 
    /* @var $countQuery Query */ 
    $countQuery = $this->cloneQuery($this->query); 

    if (! $countQuery->getHint(CountWalker::HINT_DISTINCT)) { 
     $countQuery->setHint(CountWalker::HINT_DISTINCT, true); 
    } 

    if ($this->useOutputWalker($countQuery)) { 
     $platform = $countQuery->getEntityManager()->getConnection()->getDatabasePlatform(); // law of demeter win 

     $rsm = new ResultSetMapping(); 
     $rsm->addScalarResult($platform->getSQLResultCasing('dctrn_count'), 'count'); 

     $countQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, 'Doctrine\ORM\Tools\Pagination\CountOutputWalker'); 
     $countQuery->setResultSetMapping($rsm); 
    } else { 
     $countQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, array('Doctrine\ORM\Tools\Pagination\CountWalker')); 
    } 

    $countQuery->setFirstResult(null)->setMaxResults(null); 

    try { 
     $data = $countQuery->getScalarResult(); 
     $data = array_map('current', $data); 
     $this->count = array_sum($data); 
    } catch(NoResultException $e) { 
     $this->count = 0; 
    } 
} 
return $this->count; 
}