Symfony2中的查询构建器,已知函数月错误

时间:2012-11-24 17:55:54

标签: symfony doctrine-orm customization dql query-builder

我遇到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'

5 个答案:

答案 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();

至少对我有用,希望你能找到有用的东西。