2016-06-17 10 views
0

特定のIDの前後のレコードを識別するクエリを作成しています。MINとMAXを使用する場合のDoctrine Subqueryの未定義クラス

[Semantical Error] line 0, col 138 near ', (SELECT MAX(t2.id)': Error: Class ',' is not defined.

なぜようである:上記のコードはというエラーをスローしかし

$min = $this->createQueryBuilder('t1') 
      ->select('MIN(t1.id)') 
      ->where('t.id = t1.id') 
      ->andWhere('t1.id > :id') 
      ->andWhere('t1.type = :type'); 

    $max = $this->createQueryBuilder('t2') 
      ->select('MAX(t2.id)') 
      ->where('t2.id > :id') 
      ->andWhere('t2.type = :type') 
      ->andWhere('t2.id = t.id'); 

    return $this->createQueryBuilder('t') 
     ->addSelect('(' . $min->getDQL() . ') AS min') 
     ->addSelect('(' . $max->getDQL() . ') AS max') 
     ->setParameter('id', $id) 
     ->setParameter('type', $type) 
     ->getQuery() 
     ->getScalarResult(); 

:私は、次のコードを持っていますか?

ありがとうございました。

答えて

0

あなたの問題は別名としてminmaxを使用していると思います。私はそれらを使用したときに同じエラーが発生しましたが、別名を変更するとうまくいきました。

[ 
    { 
    "max_id": "17", 
    "min_id": "16" 
    } 
] 
:私はあなたにも1 queryBuilder返さ

$queryBuilder = $this->createQueryBuilder('story'); 

    $queryBuilder 
     ->select('MAX(story.id) AS max_id') 
     ->addSelect('MIN(story.id) AS min_id') 
     ->where('story.id > :id') 
     ->setParameter('id', 1); 

    return $queryBuilder->getQuery()->getScalarResult(); 

にあなたのロジックを簡素化することができると思います

関連する問題