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

グレモが彼の答えで報告したように、組み込みの機能はありませんmonth。したがって、月関数を使用するには、DQLを拡張する必要があります。

それを行うのに熟練していない場合、または時間がない場合は、Gitbubリポジトリから無料で入手できるDoctrineExtensions MysqlFunctionPackをインストールすることをお勧めします。多くの便利なDQL関数が含まれており、関数も含まれていmonthます。

于 2012-11-24T20:01:19.040 に答える
3

メッセージが示すように、クエリビルダーはMONTH機能をサポートしていません。ユーザー定義関数を作成するか、ネイティブ SQL を結果セット マッピングと共に使用します。

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

1 か月後に日付を取得し、クエリを実行しました。

誰かを助けたい!

于 2012-11-28T14:19:18.313 に答える
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 に答える