DQL 与 SQL,为什么我没有相同的结果?



我开始创建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

最新更新