You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Doctrine执行DQL查询count(*)时报Expected Literal, got '*'错误

错误原因

Doctrine 使用的 DQL 是面向实体对象的查询语言,语法规则和原生 SQL 存在差异:它不支持直接在 count() 中使用 * 通配符作为统计参数,DQL 解析器无法将 * 映射到对应的实体属性,因此会抛出「期望得到字面量,实际得到 *」的语法错误。

正确的统计写法

有几种常用的实现方案可选:

  • 方案1:给实体设置别名,直接统计实体对象(通用写法)
    给Courrier实体设置别名后直接统计别名即可,Doctrine会自动基于实体主键统计总条数,搭配getSingleScalarResult()可以直接拿到整型的统计结果,不需要额外处理数组:

    $query = $this->em->createQuery('SELECT count(c) FROM App\Entity\Courrier c');
    $countCourrier = $query->getSingleScalarResult();
    
  • 方案2:显式统计实体主键字段(性能更优)
    直接指定统计实体的主键字段(假设主键字段为id),可以减少Doctrine的映射解析开销:

    $query = $this->em->createQuery('SELECT count(c.id) FROM App\Entity\Courrier c');
    $countCourrier = $query->getSingleScalarResult();
    
  • 方案3:调用Repository自带计数方法(最简写法)
    无自定义查询条件的场景下,可以直接调用Repository封装的count()方法,不需要手写DQL:

    $countCourrier = $this->em->getRepository(\App\Entity\Courrier::class)->count([]);
    

内容的提问来源于stack exchange,提问作者Majo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 02:06:00