我知道这个问题已经成为陈词滥调,但关于如何使用原则来解决这个问题,没有答案
因此,这是我从表中获取时间戳和金额的原则查询:
$q = $repo->createQueryBuilder('s')
->select('s.timestamp','s.amt')
->where('s.disId=:id')
->setParameter('id', $cid)
->getQuery()
->getArrayResult();
目前我正在从表中获取所有单独的行,我希望输出按月汇总amt(amount)并相应地显示记录。
感谢您的帮助
如果您的日期存储为时间戳,则不可能直接执行,因为Doctrine ORM目前不支持Mysql的MONTH()等函数,您需要在GROUP子句中使用这些函数。可能的解决方案:
-
例如,添加这些功能的安装捆绑包https://github.com/beberlei/DoctrineExtensions并使用函数MONTH()和FROM_UNIXTIME()
-
使用条令的原生查询:http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/native-sql.html
-
使用DBAL学说层:http://doctrine-orm.readthedocs.io/projects/doctrine-dbal/en/latest/
对你来说,最简单的可能是选项3,代码可以是这样的:
$em = $this->get("doctrine")->getManager();
$conn = $em->getConnection();
$sql = "SELECT MONTH(FROM_UNIXTIME(s.timestamp)) as mon, SUM(s.amt) as total FROM tablename s WHERE s.dis_id = ? GROUP BY MONTH(FROM_UNIXTIME(s.timestamp)) ORDER BY 1";
$stmt = $conn->prepare($sql);
$stmt->bindValue(1, $cid);
$stmt->execute();
$all_rows = $stmt->fetchAll();
foreach ($all_rows as $row) {
echo "Month: {$row["mon"]}, Total: {$row["total"]} n";
}
试试这个:
$q = $repo->createQueryBuilder('s')
->select('s.timestamp','sum(s.amt)')
->where('s.disId=:id')
->groupBy('s.month')//your month field name of database
->setParameter('id', $cid)
->getQuery()
->getArrayResult();
通过使用groupBy,您将得到结果。