I am looking for way to group my policies by day. I was trying a lot of examples how to do this but still there are some errors. Can anyone help me with this? Here I will show only two examples, others i was trying were similar to those. Differences were only in used SQL's functions ex(CAST, SUBSTRING, DATE...) First way i was trying is:
$query = $this->getEntityManager()
->createQueryBuilder();
$query->select('count(p), p.transactionDate')
->from('GLPolicyBundle:Policy', 'p')
->andwhere('p.shop IN (:shop_id)')
->setParameter('shop_id', $shop_list)
->andWhere($query->expr()->between('p.transactionDate', ':date_from', ':date_to'))
->setParameter('date_from', $date_from, \Doctrine\DBAL\Types\Type::DATETIME)
->setParameter('date_to', $date_to, \Doctrine\DBAL\Types\Type::DATETIME)
->addGroupBy('DAY(p.transactionDate)');
getDQL() returns:
SELECT count(p), p.transactionDate FROM GLPolicyBundle:Policy p
WHERE p.shop IN (:shop_id) AND (p.transactionDate BETWEEN :date_from AND :date_to)
GROUP BY DAY(p.transactionDate)
and the error is:
[Semantical Error] line 0, col 156 near 'DAY(p.transa': Error: Cannot group by undefined identification or result variable.
And the second way is:
$query = $this->getEntityManager()
->createQuery("SELECT p, (p.transactionDate) AS group
FROM GLPolicyBundle:Policy p
WHERE p.shop IN (:shop_id) AND (p.transactionDate BETWEEN :date_from AND :date_to)
GROUP BY DAY(group)")
->setParameter('shop_id', $shop_list)
->setParameter('date_from', $date_from, \Doctrine\DBAL\Types\Type::DATETIME)
->setParameter('date_to', $date_to, \Doctrine\DBAL\Types\Type::DATETIME);
getDQL() returns:
SELECT p, (p.transactionDate) AS group FROM GLPolicyBundle:Policy p
WHERE p.shop IN (:shop_id) AND (p.transactionDate BETWEEN :date_from AND :date_to)
GROUP BY DAY(group)
and the error is:
[Semantical Error] line 0, col 72 near 'FROM GLPolicyBundle:Policy': Error: Class 'FROM' is not defined.