18

Doctrine 2.1の時点では、CASE WHENステートメントがサポートされていますが、ドキュメントは多くありません。私の目標は、ブール値を設定して、写真がユーザーにお気に入りに追加されたかどうかを確認することです。

       ->addSelect("CASE WHEN f.photo is NULL THEN false ELSE true END as is_favorited")
       ->leftJoin("p.favorites", 'f', 'WITH', 'f.owner = :viewer')
       ->orderBy("p.date_posted", "DESC")
       ->setParameters(array("owner" => $owner, "viewer" => $viewer));

しかし、私のエンティティはJMSSerializerによってjsonに変換されているため、CASEWHENの結果をエンティティのプロパティとして設定したいと思います。

        ->addSelect("CASE WHEN f.photo is NULL THEN false ELSE true END as p.is_favorited")

しかし、残念ながら、Doctrineはこれを好まないようです:

[構文エラー]0行目、65列目:エラー:Doctrine \ ORM \ Query \ Lexer :: T_FROMが必要ですが、「。」を取得しました。

エンティティにDQLで作成されたプロパティを設定する代わりの方法はありますか?

4

4 に答える 4

0

これを試すことができますか。DQLで動作します

->addSelect("SUM(CASE WHEN f.photo is NULL THEN 0 ELSE 1 END) as p.is_favorited");
于 2014-12-19T20:41:51.150 に答える
-1

selectステートメントにFROMテーブルがリストされていないため、エラーから不平を言っているように聞こえます。

于 2015-02-05T16:29:56.437 に答える
-1

追加するだけです

->from() 

「F」のテーブル名を与える行と

于 2015-03-17T16:41:17.680 に答える