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

Symfony4中EntityManager createQuery实体参数化报错,如何用QueryBuilder写SQL?

问题解答

Doctrine的DQL不支持将实体类作为参数通过setParameter()绑定,因为DQL在解析阶段就需要明确实体的元数据,参数绑定是解析完成后才会执行的操作,所以你用:entity占位符会触发语法错误,这就是你看到报错的原因。

如果要动态指定实体类,直接把类名拼接到DQL字符串里即可:

use test\coreBundle\Entity\Product;
...
$query = $em->createQuery(sprintf("SELECT p FROM %s p JOIN p.productdetails d", Product::class));

关于你问的QueryBuilder:完全可以用它编写完整的查询,而且QueryBuilder更适合动态构建查询,还能避免手动拼接字符串的问题。对应你的需求,写法如下:

use test\coreBundle\Entity\Product;
...
$queryBuilder = $em->createQueryBuilder()
    ->select('p')
    ->from(Product::class, 'p')
    ->join('p.productdetails', 'd');

$query = $queryBuilder->getQuery();

这样既实现了和原代码一致的查询逻辑,又符合Symfony 4的使用规范,不会出现语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 13:07:10