gpt4 book ai didi

php - Doctrine QueryBuilder > 使用多对多关系

转载 作者:行者123 更新时间:2023-11-29 10:55:33 25 4
gpt4 key购买 nike

我已经在这个问题上苦苦挣扎了一段时间,所有相关主题都不符合我的具体需求。我正在构建一个“仪表板”,为广泛的实体提供系统监督。出于显而易见的原因,我希望查询尽可能少且尽可能高效。因此,我尝试将查询限制为每个实体 1 次,在其中检索所有相关信息。

当我需要从 ManyToMany(或 OneToMany)关系实体中提取特定数据时,我的问题就出现了。

例如,在以下情况下,我尝试查找没有链接任何发票的帐户数量。

    $qb = $this->getDoctrine()->getManager()->createQueryBuilder();
$qb->select(array(
'COUNT(account) as totalAccounts',
'SUM(account.active) as activeAccounts',
'SUM(account.approved) as approvedAccounts',
'SUM(account.reverted) as revertedAccounts',
'SUM(account.approvalRequested) as pendingApprovalAccounts',
"SUM(CASE WHEN COUNT(account.invoices) = 0 THEN 1 ELSE 0 END) as testAccounts"
))
->from('AppBundle:Account', 'account');

我收到以下错误:QueryException:[语义错误]第 0 行,第 252 列“发票”附近)= 0:错误:无效的 PathExpression。需要 StateFieldPathExpression 或 SingleValuedAssociationField。

在下面的示例中,我尝试查找附加了未付发票的用户数量。我通过加入 user.invoices 尝试了不同的方法。

    $qb = $this->getDoctrine()->getManager()->createQueryBuilder();
$qb->select(array(
'COUNT(user) as totalUsers',
'SUM(user.active) as activeUsers',
"SUM(CASE WHEN user.userType = 'MONTHLY' AND user.active = true THEN 1 ELSE 0 END) as monthlyUsers",
"SUM(CASE WHEN user.userType = 'PAYG' AND user.active = true THEN 1 ELSE 0 END) as paygUsers",
"SUM(CASE WHEN user.noticeType = 'SWITCH' AND user.active = true THEN 1 ELSE 0 END) as noticeUsersPayg",
"SUM(CASE WHEN user.noticeType = 'DISABLE' AND user.active = true THEN 1 ELSE 0 END) as noticeUsersDisable",
"SUM(CASE WHEN SUM(CASE WHEN invoices.datePaid is null THEN 1 ELSE 0 END) > 0 THEN 1 ELSE 0 END) as suspendedUsers",
))
->from('AppBundle:User', 'user')
->leftJoin('user.invoices', 'invoices');

在这种情况下我收到错误:SQLSTATE[HY000]:一般错误:1111 组函数的使用无效

我可以使用 SQL 中所有必要的 SELECT 子查询轻松构建正确的查询,但我尝试使用 QueryBuilder 以正确的方式做到这一点。 QueryBuilder 似乎也不接受或允许 SELECT 子查询。我知道我可能做错了一些(或很多)事情,这就是我发布这个问题的原因。我认为如果这个问题得到正确的回答,其他人会受益匪浅,因为关系实体影响返回数据的查询是我们都遇到过的问题,而且我找不到任何解决这个问题的适当内容。

最佳答案

您现在主要是在与 ORM 作斗争,我认为这是您最好使用 native 查询的情况之一。您基本上只是返回标量值以进行报告,为此使用 ORM 并没有太多优势。

参见http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/native-sql.html

关于php - Doctrine QueryBuilder > 使用多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43091834/

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