Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Doctrine orm 返回使用createQuery的条令查询的结果数_Doctrine Orm - Fatal编程技术网

Doctrine orm 返回使用createQuery的条令查询的结果数

Doctrine orm 返回使用createQuery的条令查询的结果数,doctrine-orm,Doctrine Orm,如果有类似上述的查询,我将如何检索结果数?您可以事先执行计数查询: $q = $this->_em->createQuery("SELECT s FROM app\models\Quest s LEFT JOIN s.que c WHERE s.type = '$sub'

如果有类似上述的查询,我将如何检索结果数?

您可以事先执行计数查询:

$q = $this->_em->createQuery("SELECT s FROM app\models\Quest s 
                                    LEFT JOIN s.que c
                                    WHERE s.type = '$sub'
                                    AND c.id = '$id'");
或者,您可以执行查询并获取结果数组的大小:

$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();

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

或者,您可以查看Doctrine Paginator类对查询对象所做的操作,以获得计数(尽管这种方法很可能是过火了,但它回答了您的问题):

$quests = $q->getResult();
$count = count($quests);
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;
}