如何解决DQL vs 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 它要大得多。我认为这是我的选择不正确的问题,但是什么?我不知道。
编辑:
我得到了答案,这是一件愚蠢的事情
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',$dateTo)
但我仍在努力寻找为什么我的 from 没用。谢谢大家:)
解决方法
问题可能出在 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 中设置的别名 (bw
) 不同。然后你要求数 p
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。