1

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

5 回答 5

8

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

如果你不熟练或者你没有时间,我建议安装DoctrineExtensions Mysql Function Pack,它可以在 Gitbub 存储库中免费获得。它包含了许多有用的DQL函数,甚至包含了该month函数。

于 2012-11-24T20:01:19.040 回答
3

正如消息所说:查询生成器不支持MONTH功能。要么编写用户定义的函数,要么使用带有结果集映射的本机 SQL

于 2012-11-24T18:40:18.970 回答
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));

一个月后我拿了日期并做了查询。

我希望能帮助别人!

于 2012-11-28T14:19:18.313 回答
1

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

$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();
于 2016-05-11T16:56:22.950 回答
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();

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

于 2015-02-06T13:43:02.857 回答