Symfony2中的查询生成器,已知函数月错误

Symfony2中的查询生成器,已知函数月错误,symfony,doctrine-orm,customization,dql,query-builder,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') ->s

我对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'

正如消息所说:查询生成器不支持
MONTH
功能。编写或使用。

正如消息所述:查询生成器不支持
MONTH
功能。要么写a,要么使用。

正如格雷莫在他的回答中所报告的那样,没有内置的
month
功能。因此,您必须扩展DQL以拥有month函数

如果您不擅长这样做,或者没有时间,我建议您安装免费的Gitbub存储库。
它包括许多有用的DQL函数,甚至包括
month
函数。

正如Gremo在他的回答中所述,没有内置的
month
函数。因此,您必须扩展DQL以拥有month函数

如果您不擅长这样做,或者没有时间,我建议您安装免费的Gitbub存储库。
它包含了许多有用的DQL函数,甚至还包含了
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));
我在一个月后确定了日期并进行了查询


我希望能帮助别人

我终于解决了我的问题! 最后我一个月都没用

$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));
我在一个月后确定了日期并进行了查询


我希望能帮助别人

我遇到了同样的问题,我使用以下代码解决了这个问题:

    $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();
$qb=$this->getEntityManager()->createQueryBuilder();
$startDate=日期('Y-m-')。'01'; // 当月第一天
$endDate=日期('Y-m-t');//当月最后一天
$qb
->addSelect('l')
->from('BackendBundle:Local','l')
->加入(‘l.铭文’、‘i’)
->其中('i.date>=:startDate')

->和where('i.date我遇到了相同的问题,我使用以下代码解决了这个问题:

    $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();
$qb=$this->getEntityManager()->createQueryBuilder();
$startDate=date('Y-m-')。'01';//当月的第一天
$endDate=date('Y-m-t');//本月的最后一天
$qb
->addSelect('l')
->from('BackendBundle:Local','l')
->加入(‘l.铭文’、‘i’)
->其中('i.date>=:startDate')

->和where('i.date解决这个问题很容易,至少对我来说:

$month= 04;
$qb = $this->getEntityManager()->createQueryBuilder();
$result = $qb->select('yd')
->from('RocketSellerTwoPickBundle:YearDates','yd')
->where($qb->expr()->like('yd.date', ':month'))
->setParameter('month', '%-' . $month . '-%')
->getQuery()
->getResult();

至少对我来说,这是一个解决这个问题的简单方法:

$month= 04;
$qb = $this->getEntityManager()->createQueryBuilder();
$result = $qb->select('yd')
->from('RocketSellerTwoPickBundle:YearDates','yd')
->where($qb->expr()->like('yd.date', ':month'))
->setParameter('month', '%-' . $month . '-%')
->getQuery()
->getResult();

您是如何解决问题的?是@JeanValjean最后,我将回答问题您是如何解决问题的?是@JeanValjean最后,我将回答问题我已安装此扩展包,但我仍然收到错误(预期功能,获得年份),我通过composer获得了扩展,我们使用的是注释映射而不是YAML,那么是否有任何技巧可以使用注释驱动程序启用此扩展包?我们将此扩展包与Gedmo一起使用,可以吗?我已经安装了此扩展包,但我仍然收到错误(预期功能,获得年份),我由composer获得了扩展,我们使用的是注释映射而不是YAML,那么有什么技巧可以启用带有注释驱动程序的扩展包吗?我们将此扩展包与Gedmo一起使用,可以吗?