ネイティブ SQL で次のようなクエリを実行したいと考えています。
SELECT
AVG(t.column) AS average_value
FROM
table t
WHERE
YEAR(t.timestamp) = 2013 AND
MONTH(t.timestamp) = 09 AND
DAY(t.timestamp) = 16 AND
t.somethingelse LIKE 'somethingelse'
GROUP BY
t.somethingelse;
これをDoctrineのクエリビルダーで次のように実装しようとしている場合:
$qb = $this->getDoctrine()->createQueryBuilder();
$qb->select('e.column AS average_value')
->from('MyBundle:MyEntity', 'e')
->where('YEAR(e.timestamp) = 2013')
->andWhere('MONTH(e.timestamp) = 09')
->andWhere('DAY(e.timestamp) = 16')
->andWhere('u.somethingelse LIKE somethingelse')
->groupBy('somethingelse');
エラー例外が発生します
[構文エラー] 行 0、列 63: エラー: 既知の関数が予期され、'YEAR' を取得しました
Doctrines クエリビルダーでクエリを実装するにはどうすればよいですか?
ノート:
- Doctrine の Native SQLについて知っています。これを試してみましたが、生産データベース テーブルと開発データベース テーブルの名前が異なるという問題が発生します。データベースにとらわれずに作業したいので、これはオプションではありません。
- 私はデータベースにとらわれずに作業したいのですが、参考までに、私はMySQLを使用しています。
YEAR()
Doctrine を拡張してetc. ステートメントを「学習」する方法があります。しかし、サードパーティのプラグインを含めないようにする方法を探しています。