我想在列表中显示存储在我数据库中特定表中的所有数据。
完成我的查询后,我想获得显示或不显示结果的数量。
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();
我的问题是:如何计算查询结果(即使没有结果)?
答案 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'
绝对毫无用处......