【问题标题】:How to do math expresion in queryBilder->addSelect()如何在查询 Builder->addSelect() 中做数学表达式
【发布时间】:2021-10-20 03:24:24
【问题描述】:

我需要对一些数字进行除法,我的 DQL:

$q
    ->addSelect("({$subDQL->getDQL()})")
    ->addSelect("calculated_sum/e.total AS available")

第一个addSelect 正确返回calculated_sum,但第二个addSelect 抛出错误。

for:
->addSelect("calculated_sum/i.total AS available")
->addSelect($q->expr()->quot("billing_paid", "pd.total") ." AS available")

error is:
Expected Doctrine\\ORM\\Query\\Lexer::T_FROM, got '/'
for:
->addSelect("QUOT(billing_paid, pd.total) AS available")

error is:
Expected known function, got 'QUOT'

available 是当 1 完全可用且小于 1 部分可用且 0 不可用时从 0 变为 1 的值。

【问题讨论】:

  • 您确定错误不在->addSelect("calculated_sum/i.total AS available") 中,因为它是您使用/ 的唯一地方。如果没问题,请尝试将->addSelect($q->expr()->quot("billing_paid", "pd.total") ."AS available") 更改为->addSelect($q->expr()->quot("billing_paid", "pd.total") ." AS available"),也许那个空格会导致查询失败。
  • @alexcm tnx,但该错误已复制到此处,但我的错误是使用错误的逻辑,计算总和必须在主查询中定义,而不是在子查询中定义,其他不能使用变量从 1 addSelect 在其他,在 MySql 中抛出错误。

标签: symfony orm query-builder dql


【解决方案1】:

不要在php 中抛出错误,而是在MySql 中抛出错误,因为在第二次选择中调用calculated_sum 时未定义:

$q
    ->addSelect("({$subDQL->getDQL()}) AS HIDDEN calculated_sum")
    ->addSelect("(calculated_sum/e.total) AS HIDDEN available")

正确:

$subDQL_cs = $this->_em->createQueryBuilder()
            ->select('SUM(p.price)')...

$subDQL_a = $this->_em->createQueryBuilder()
            ->select('SUM(p.price)/e.total')...

$q
    ->addSelect("({$subDQL_cs->getDQL()}) AS HIDDEN calculated_sum")
    ->addSelect("({$subDQL_a->getDQL()}) AS HIDDEN available")

注意

那个破getSingleScalarResult()就要用getSingleResult()[1]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 2016-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    相关资源
    最近更新 更多