我开始创建DQL请求,但我有一个小问题,我不知道为什么。
SELECT count(*)
FROM bw_ach bw
where type_demande = 'MES' and soustype_demande in ('MES avec intervention', 'MES dégradée')
and tenu_delai_standard = 'Oui' and date_statut_cloture BETWEEN :dateFrom AND :dateTo
我在SQL中有这个请求,它正确工作,我得到一个正常的结果,但我试图在DQL上转换它,所以我得到这个:
return $this->createQueryBuilder('p')
->select('COUNT(p)')
->from(bwACH::class, 'bw')
->andWhere("bw.TYPE_DEMANDE = 'MES'")
->andWhere("bw.SOUSTYPE_DEMANDE in ('MES avec intervention', 'MES dégradée')")
->andWhere("bw.TENU_DELAI_STANDARD = 'Oui'")
->andWhere('bw.DATE_STATUT_CLOTURE BETWEEN :dateFrom AND :dateTo')
->setParameter('dateFrom', $dateFrom)
->setParameter('dateTo', $dateTo)
但是我没有相同的结果,使用DQL它要大得多。我想是我的select出错了,但是什么?我不知道。
编辑:
我得到了答案,这是一个愚蠢的事情
return $this->createQueryBuilder('p')
->select('COUNT(p)')
->andWhere("p.TYPE_DEMANDE = 'MES'")
->andWhere("p.SOUSTYPE_DEMANDE in ('MES avec intervention', 'MES dégradée')")
->andWhere("p.TENU_DELAI_STANDARD = 'Oui'")
->andWhere('p.DATE_STATUT_CLOTURE BETWEEN :dateFrom AND :dateTo')
->setParameter('dateFrom', $dateFrom)
->setParameter('dateTo', $dateTo)
但我仍然试图寻找为什么我的从是无用的。谢谢大家:)
问题可能是你的日期参数在php $dateFrom和$dateTo,他们没有被解释为你认为
你应该试着像这样改变日期部分:
->setParameter('dateFrom', $dateFrom->format("Y-m-d H:i:s"))
->setParameter('dateTo', $dateTo->format("Y-m-d H:i:s"))
from是无用的,因为它覆盖了EntityRepository
在创建queryBuilder时设置的:
/**
* Creates a new QueryBuilder instance that is prepopulated for this entity name.
*
* @param string $alias
* @param string $indexBy The index for the from.
*
* @return QueryBuilder
*/
public function createQueryBuilder($alias, $indexBy = null)
{
return $this->_em->createQueryBuilder()
->select($alias)
->from($this->_entityName, $alias, $indexBy);
}
并且您给出的别名(p
)与您在from also (bw
)中设置的别名不相同。然后你要求计算p