gpt4 book ai didi

php - Doctrine2 Symfony2 innerJoin QueryException 预期 Doctrine\ORM\Query\Lexer::T_WITH,得到 'ON'

转载 作者:可可西里 更新时间:2023-11-01 07:48:20 25 4
gpt4 key购买 nike

作为我网站的一部分,我正在尝试使用 Symfony2 和 Doctrine2 创建标记 (folksonomy) 系统。

我正在按照下面文档中的表格和查询示例来创建我的 Doctrine 实体:http://dablog.ulcc.ac.uk/wp-content/uploads/2007/12/tagging_folksonomy.pdf

当我尝试将 MySQL 查询(在文档中给出)转换为 Doctrine Query Builder 查询时,我在 innerJoins 中遇到错误。示例如下:

来自文档的 MySQL 查询:

SELECT tag_text
, COUNT(*) as num_tags
FROM Tag2Post t2p
INNER JOIN Tags t
ON t2p.tag_id = t.tag_id
GROUP BY tag_text;

My Doctrine Query Builder 查询:

$qb = $em->createQueryBuilder()
->select('t.tag_text, COUNT(*) as num_tags')
->from('CompanyWebsiteBundle:Tag2Post', 't2p')
->innerJoin('CompanyWebsiteBundle:Tags', 't', 'ON', 't2p.tag_id = t.id')
->groupBy('t.tag_text')
;
$tags = $qb->getQuery()->getResult();

错误信息:

[2/2] QueryException: [Syntax Error] line 0, col 112: Error: Expected Doctrine\ORM\Query\Lexer::T_WITH, got 'ON'
[1/2] QueryException: SELECT t.tag_text, COUNT(*) as num_tags FROM CompanyWebsiteBundle:Tag2Post t2p INNER JOIN CompanyWebsiteBundle:Tag t ON t2p.tag_id = t.id GROUP BY t.tag_text

当我直接在数据库上运行 MySQL 查询时,它起作用了!

最佳答案

这应该有效。在 DQL 中,ON 关键字被替换为 WITH

$qb = $em->createQueryBuilder()
->select('t.tag_text, COUNT(*) as num_tags')
->from('CompanyWebsiteBundle:Tag2Post', 't2p')
->innerJoin('CompanyWebsiteBundle:Tags', 't', 'WITH', 't2p.tag_id = t.id')
->groupBy('t.tag_text')
;
$tags = $qb->getQuery()->getResult();

此外,如果您已正确配置实体,您应该能够省略 、'WITH'、't2p.tag_id = t.id' 部分,因为原则应该会自动找到关系。

例如:

$qb = $em->createQueryBuilder()
->select('t.tag_text, COUNT(*) as num_tags')
->from('CompanyWebsiteBundle:Tag2Post', 't2p')
->innerJoin('t2p.tags', 't')
->groupBy('t.tag_text')
;
$tags = $qb->getQuery()->getResult();

关于php - Doctrine2 Symfony2 innerJoin QueryException 预期 Doctrine\ORM\Query\Lexer::T_WITH,得到 'ON',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12071431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com