我想要做的是在给定月份的数据库中完成所有的休假。
我尝试了多种解决方案,但都没有。我结束了与学说(有点)的黑魔法。
这是我的最后一次尝试:
public function getNbCongesByMonth($month){
$listOfEntities = $this->createQueryBuilder('e')
->select('count(e) as nb, SUBSTRING(e.cngDateDebut, 6, 2) as day')
->where('day = :month')
->setParameter('month', $month)
->getQuery()
->getResult();
return $listOfEntities;
}
请求应该在数据库中返回精确月份的“Conges”数量。
有了这个请求,我收到了这个错误:
An exception occurred while executing 'SELECT count(c0_.CNG_ID) AS sclr0, SUBSTRING(c0_.CNG_DATE_DEBUT FROM 6 FOR 2) AS sclr1 FROM Conges c0_ WHERE sclr1 = ?' with params ["5"]:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'sclr1' in 'where clause'
我不知道如何做到这一点,所以如果有人有一个很棒的解决方案。
提前致谢。
答案 0 :(得分:1)
如果对datetime
属性使用cngDateDebut
类型,则可以使用基于MySQL使用的like()
格式的YYYY-MM-DD HH:MM:SS
条件:
public function getNbCongesByMonth($month){
$qb = $this->createQueryBuilder('e');
$listOfEntities = $qb
->select('count(e) as nb')
->where(
$qb->expr()->like('e.cngDateDebut',
$qb->expr()->literal('%-'.$month.'-%')
)
)
->getQuery()
->getResult();
return $listOfEntities;
}
如果你想计算某一年某个月的休假天数:
public function getNbCongesByMonth($year, $month){
$qb = $this->createQueryBuilder('e');
$listOfEntities = $qb
->select('count(e) as nb')
->where(
$qb->expr()->like('e.cngDateDebut',
$qb->expr()->literal($year.'-'.$month.'-%')
)
)
->getQuery()
->getResult();
return $listOfEntities;
}
%
是一个匹配任何内容的关键字,因此对于$month = 04
,'%-'.$month.'-%'
,模式将为'%-04-%'
,此模式将与2016-04-…'
匹配,{{ 1}}等等。