Symfony:$ query-> getResult()在表空为

时间:2016-06-28 13:03:38

标签: mysql sql doctrine symfony

我想在列表中显示存储在我数据库中特定表中的所有数据。

完成我的查询后,我想获得显示或不显示结果的数量。

public function listUseCaseAction(Request $request) {    
    // Load use cases from database
    $em   = $this->getDoctrine()->getManager();
    $repo = $em->getRepository('AppBundle:TagUseCase');

    $query = $repo->createQueryBuilder('case')
        ->select(array('case.code', 'case.name'))
        ->orderBy('case.name', 'ASC')
        ->getQuery();

    if (count($query->getResult()) > 0) {
        // display list
    } else {
        // message : "There is no use case."        
    }
}

问题是当表为空时$query->getResult()似乎没有返回任何内容。既不假也不空......

仅在有数据时返回一个数字。

DQL:

'SELECT case.code, case.name FROM AppBundle\Entity\TagUseCase case ORDER BY case.name ASC'

注意:我必须得到一个查询,因为我使用的是KnpPaginator。 我尝试了$repository->findAll(),它甚至可以使用一个表为空(返回一个空数组),但可排序的列不再起作用。 它仅适用于查询。

我也尝试了这个,但它既不起作用,当0结果时它什么也不返回:

$qb = $em->createQueryBuilder();
$qb->select($qb->expr()->count('case.code'));
$qb->from('AppBundle:TagUseCase','case');

$count = $qb->getQuery()->getSingleScalarResult();

我的问题是:如何计算查询结果(即使没有结果)?

3 个答案:

答案 0 :(得分:0)

我建议使用Query::count()方法:

if ($query->count()) > 0) {
    // display list
} ...

答案 1 :(得分:0)

如果您使用查询迭代思考列表,最好使用php计数而不是其他查询。

结果作为对象,用php计算:

$qb = $repo->createQueryBuilder('case')
        ->orderBy('case.name', 'ASC')
        ;
$result = $qb->getQuery()->getResult();
var_dump(count($result));

答案 2 :(得分:0)

我发现了问题!

你永远不应该使用字符串" case "在查询中,它是一个SQL 保留字 !!

而不是:

$query = $repo->createQueryBuilder('case')
    ->select(array('case.code', 'case.name'))
    ->orderBy('case.name', 'ASC')
    ->getQuery();

写:

$query = $repo->createQueryBuilder('c')
    ->select(array('c.code', 'c.name'))
    ->orderBy('c.name', 'ASC')
    ->getQuery();

错误[Syntax Error] line 0, col 17: Error: Expected Doctrine\ORM\Query\Lexer::T_WHEN, got 'AppBundle\Entity\TagUseCase'绝对毫无用处......