2016-04-29 9 views
-1

私がしたいことは、指定された月のデータベースですべての休日を取得することです。「月が唯一の句」

私は複数のソリューションを試してみましたが、どちらも機能しませんでした。私は教義で黒い魔法をやることで終わりました(ちょっと)。

public function getNbCongesByMonth($month){ 
    $listOfEntities = $this->createQueryBuilder('e') 
     ->select('count(e) as nb, SUBSTRING(e.cngDateDebut, 6, 2) as day') 
     ->where('day = :month') 
     ->setParameter('month', $month) 
     ->getQuery() 
     ->getResult(); 
    return $listOfEntities; 
} 

が要求を正確な月のデータベースに「Conges」の量を返すことになっている:

は、ここに私の最後の試みです。この要求に

私はこのエラーを得た:

An exception occurred while executing 'SELECT count(c0_.CNG_ID) AS sclr0, SUBSTRING(c0_.CNG_DATE_DEBUT FROM 6 FOR 2) AS sclr1 FROM Conges c0_ WHERE sclr1 = ?' with params ["5"]: 

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'sclr1' in 'where clause' 

私は、誰かが素晴らしいだろう解決策を持っているので、もしもうそれを行うためにどのように何のアイデアを持っていません。

ありがとうございます。

+0

なぜダウンボートを説明できますか?私はここに新しいです、私は間違って何をしましたか? –

+0

私はcngDateDebutがDateTimeだと推測しているので、これを他のDateTimeオブジェクトとだけ比較することはできますが、これは決して動作しません – Nickolaus

+0

このようなクエリは不可能です。列エイリアスを使用することはできません)where節では決してありません。任意のSQLデータベースエンジンwhere節がselect節より前に処理されるからです。私は新しいモデルを開くことをお勧めします。ここでは、あなたのDBモデルを入れて、どのデータを取得したいのか、そして誰かがあなたにクエリを書くことができるかを例を挙げます。 – Miro

答えて

1

あなたがcngDateDebutプロパティのdatetimeタイプを使用する場合は、MySQLが使用YYYY-MM-DD HH:MM:SSフォーマットに基づいてlike()条件を使用することができます。

public function getNbCongesByMonth($month){ 
    $qb = $this->createQueryBuilder('e'); 

    $listOfEntities = $qb 
     ->select('count(e) as nb') 
     ->where(
      $qb->expr()->like('e.cngDateDebut', 
       $qb->expr()->literal('%-'.$month.'-%') 
      ) 
     ) 
     ->getQuery() 
     ->getResult(); 
    return $listOfEntities; 
} 

そして、あなたが特定のための唯一の日オフをカウントしたい場合は、与えられた年から月:パターンは0になります'%-'.$month.'-%'$month = 04となるよう

public function getNbCongesByMonth($year, $month){ 
    $qb = $this->createQueryBuilder('e'); 

    $listOfEntities = $qb 
     ->select('count(e) as nb') 
     ->where(
      $qb->expr()->like('e.cngDateDebut', 
       $qb->expr()->literal($year.'-'.$month.'-%') 
      ) 
     ) 
     ->getQuery() 
     ->getResult(); 
    return $listOfEntities; 
} 

%は、何も一致したキーワードですと一致し、このパターンは2016-04-…',2015-04-…'などと一致します。

+1

それは私が欲しかったものです。今私は自分のプロジェクトに合わせて調整する必要がありますが、私はあなたなしでそれを行う方法は決して見つけられませんでした。ありがとう –