3

テーブルフィールドの日時値を選択して計算されたUNIXタイムスタンプを取得し、テーブルの別の値を追加するクエリがあります。クエリは次のようなものです。

SELECT UNIX_TIMESTAMP(DATE_ADD(mydatetimefield, INTERVAL m.myfield1 + m.myfield2 MINUTE)) FROM mytable AS m

このクエリは phpMyAdmin から正しく実行されますが、Doctrine 2 の createQueryBuilder メソッドで使用しようとすると、「myfield」でエラーが発生します。INTERVAL キーワードの後の計算値をサポートしていないようです

Error: Expected Doctrine\ORM\Query\Lexer::T_COMMA, got 'm'

教義を使用して同じクエリ結果を取得するにはどうすればよいですか? 名前付きパラメーターがいくつかあるため、クエリビルダーを使用します

4

2 に答える 2

3

デフォルトでは、Doctrine は などの特定のベンダーのすべての機能をサポートしているわけではありませんDATE_ADD。ただし、カスタム定義関数を使用できます。そのリンクには、日付の追加に特化した例があります。

Doctrine 2 での DQL の拡張: ユーザー定義関数

もう 1 つのオプションは、クエリの複雑さに応じて、アプリケーション コードでこれを処理することです。あなたが実際に日時である場合、Doctrine は返されたオブジェクトでmydatetimefieldそれを php に変換します。DateTime

$myDateTimeField = $object->getMyDateTimeField();
$myDateTimeField->add(new DateInterval( $object->getMyField1() + $object->getMyField2() . 'M'));

dbal最後に、いつでも同様に使用できます。

于 2012-11-21T22:49:40.850 に答える
1

これが原因かどうかはわかりませんが、エイリアスがある場所にカンマがないことを訴えているmため、ユーザー定義関数を適切に解析できないと思われます。

DATE_ADDandUNIX_TIMESTAMPDQL User Defined Functionsとして定義しましたか? 詳細については、日付追加の例を参照してください。

于 2012-11-21T22:47:27.740 に答える