我遇到Symfony2 QueryBuilder的问题。
我有以下代码抛出错误
$repositorio= $em->getRepository('SingUserBundle:Data');
$consulta= $repositorio->createQueryBuilder('d')
->where('d.usuario = :usuario')
->andWhere ('MONTH(d.fecha) = :mesActual')
->setParameter('usuario', $usuario->getId())
->setParameter('mesActual', $mesActual)
->getQuery();
$totaldatos= $consulta->getSingleResult();
错误是:
[Syntax Error] line 0, col 80: Error: Expected known function, got 'MONTH'
答案 0 :(得分:8)
正如 Gremo 在他的回答中所述,没有内置month
功能。因此,您必须扩展DQL以具有月份功能。
如果您不熟练或没有时间,我建议安装{Gntbub存储库免费提供的DoctrineExtensions Mysql Function Pack。
它包含许多有用的 DQL 函数,甚至包括month
函数。
答案 1 :(得分:3)
正如消息所示:查询构建器不支持MONTH
功能。可以写user defined function或使用native SQL with a result set mapping。
答案 2 :(得分:1)
最后我解决了我的问题! 最后我没有使用MONTH
$fecha=new \DateTime("now");
$fecha->setDate(DATE_FORMAT($fecha, 'Y'),DATE_FORMAT($fecha, 'm'),01);
$qb= $this->createQueryBuilder('ud')
->where('ud.usuario = :identifier')
->andWhere('ud.fecha >= :identifier2')
->setParameters(array('identifier'=>$user,'identifier2'=> $fecha));
我把这个日期延迟了一个月,然后进行了查询。
我希望能帮助别人!
答案 3 :(得分:1)
解决这个问题是一个简单的解决方案,至少对我来说是这样的:
ks
答案 4 :(得分:0)
我遇到了同样的问题,我使用以下代码解决了这个问题:
$qb = $this->getEntityManager()->createQueryBuilder();
$startDate = date( 'Y-m-' ) . '01'; // First day in current month
$endDate = date( 'Y-m-t' ); // Last day in current month
$qb
->addSelect( 'l' )
->from( 'BackendBundle:Local', 'l' )
->join('l.inscriptions', 'i')
->where( 'i.date >= :startDate' )
->andWhere( 'i.date <= :endDate' )
->setParameter('startDate', $startDate)
->setParameter('endDate', $endDate)
;
$query = $qb->getQuery();
$query->setQueryCacheLifetime( 3600 );
$query->setResultCacheLifetime( 3600 );
$query->useQueryCache( true );
return $query->getResult();
至少对我有用,希望你能找到有用的东西。