#symfony #orm #query-builder #dql
Вопрос:
Мне нужно разделить некоторые числа, мой 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
это значение, которое изменяется от 0 до 1, когда 1 полностью доступен, а менее 1 частично доступно, а 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")
, возможно, это единственное пространство приводит к сбою запроса.2. @alexcm tnx, но эта ошибка была при копировании сюда, но моя ошибка заключалась в том, что я использовал неправильную логику, calculated_sum необходимо определить в основном запросе, а не в подзапросе и других, которые невозможно использовать переменную от 1 addSelect в другом, ошибка в MySQL.
Ответ №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]