Я написал запрос, который должен занять последние 7 дней и рассчитать сумму расходов за каждый день.
SELECT
DATE(transaction_date) AS TransactionDate,
SUM(amount) AS Amount
FROM transaction
WHERE type = 'spend'
AND transaction_date>= DATE_ADD(NOW(), INTERVAL -7 DAY)
GROUP BY TransactionDate
Когда я запускаю свой sql-запрос, он работает нормально, но я могу ошибаться в своей функции, которую написал в Symfony. Он возвращает значение null, чего нельзя сказать о приведенном выше запросе.
public function getWeeklyTrans()
{
$date = date('Y-m-d h:i:s', strtotime("-7 days"));
$result = $this->getAmountRepository()
->createQueryBuilder('p')
->select('sum(abs(p.amount))')
->where('p.transactionDate BETWEEN :today AND :n7days')
->setParameter('today', date('Y-m-d h:i:s'))
->setParameter('n7days', $date)
->getQuery()
->getArrayResult();
return $result;
}
Я не на 100% знаком с конструктором запросов, но не следует ли вам использовать ->execute() в конце вместо ->getArrayResult()?
Может быть, но здесь нет логики. @Dirk
У меня проблема с преобразованием. Я вижу разницу. :( @ADyson
а что мешает вам перейти с BETWEEN на> =? А что вам мешает выбрать другое поле? А что вам мешает добавить группу? Вы проверяли документацию по построителю запросов? Это все простые вещи, там должны быть примеры.
попробуйте использовать BETWEEN :n7days AND :today
Все тот же результат. @Matteo
вы скучаете по условию type = 'spend'






Разве вы не можете получить SQL из построителя запросов и сопоставить его со своим рабочим запросом?
Что-то вроде $qb->getQuery()->getSQL()?
Кажется, пропущено несколько условий
type = 'spend'
transaction_date>= DATE_ADD(NOW(), INTERVAL -7 DAY) не совсем то же состояние
GROUP BY TransactionDate тоже отсутствует.
Большое спасибо. Я нашел решение.
public function getTrans()
{
$type = Transaction::TYPE_SPEND;
$result = $this->getAmountRepository()
->createQueryBuilder('p')
->select('sum(p.amount)')
->where('p.transactionDate >= :end')
->andWhere('p.type >= :type')
->setParameter('end', new \DateTime('-7 days'))
->setParameter('type', $type)
->groupBy('p.transactionDate')
->getQuery()
->getResult();
return $result;
}
запросы не совсем то же самое - у одного есть дополнительный столбец и группа по, и используется> - = вместо BETWEEN. Так что, похоже, меньше о синтаксисе Symfony и больше о составе самого запроса ...