私は数日前にまったく同じバグに巻き込まれました。Timestampable 動作のバグが原因だと思います。Product モデルで有効にしていると思いますが、Doctrine は一連のフィールドに updated_at フィールドを追加して更新 (SET) し、その後に SQL パラメーターがあるという事実に注意を払いません (where 句内)。 )。Timestampable が関与していないため、SELECT を実行するときにこのバグが発生することはありません。
私が見つけた唯一の解決策は、実行の配列パラメーターではなく、クエリを作成するときにパラメーターを提供することであり、Doctrine は混乱しません。このような:
$q->update('product')
->set('quantity', 20)
->where('id = ?', 5);
$q->execute();
ただし、同じクエリを異なる値で何度も実行する必要がある場合は、準備フェーズと実行フェーズを分離することによるパフォーマンス上の利点が失われます。これが唯一の解決策のようです。
パフォーマンスを低下させずに解決できる可能性のある解決策: これは確認していませんが、匿名の代わりに名前付きパラメーターを使用した場合にバグが表面化しないことを願っています ? プレースホルダー。名前付きパラメータに対する Doctrine のサポートについては、http: //www.doctrine-project.org/documentation/manual/1_2/en/dql-doctrine-query-languageで説明されています。
編集:それ以来、名前付きパラメーターを使用して別のアプローチを試みましたが、残念ながらバグが残っています。Doctrine は、同じクエリで名前付きパラメーターと匿名パラメーターを混在させることはできないというエラーを出します。これは、IMOのずっと前に修正されているはずです。