2011-09-13 11 views
1

私はコメントテーブルを持っており、各コメントは "承認されました"、 "待機中です"、 "隠されました"のようなステータスを持っています。私がコメントを表示するとき、彼らはステータスに応じてソートされたい - 「承認された」、「モデレート待ち」、「隠された」。私はUNIONを使ってそれを行うことができますが、それはパフォーマンス上の貧弱なソリューションです。Doctrine2複合注文

"ORDER BY(ステータス<>「非表示」)DESC」に相当するDoctrine2があるのだろうか?私は計算されたフィールド(Can Doctrine2 @OrderBy a calculated field?)で注文について知っていますが、ここでそれを適用する方法はわかりません。

答えて

0

この問題は解決しましたか?あなたがそれをやり遂げることができるもう一つの方法は、ステータスに値を与え、必要に応じてそれを順序付けるSQLクエリです。

$ conn = $ entity_manager-> getConnection(); $ stmtは= $ conn->クエリ(」 Dを選択 。*、ケースのステータスその後、 『承認』するとき1 『節度を待っている』を2 ときシーケンス によってテーブルの順序から、その後3末端配列 を 『隠れました』 ");

ただループしました。あなたが2.2を使用している場合CASE発現とHIDDENキーワードがあり

+0

を使用することができます。私はこの回避策に精通していますが、結果として配列のセットを取得するだけで、モデルインスタンスを作成したいと思います。私が思いついた解決策は、すべてのレコードが適切にソートされているMySQLビュー(私の最初のテーブルではなく)を照会することです。最も柔軟なものではありませんが、私のためにうまくいきます。 – artshpakov

1

Doctrine CaseExpression EBNFの時点で、あなたは申し訳ありませんが、しばらくの間離れてい

SELECT c, CASE WHEN (c.status = 'hidden') THEN 1 ELSE 0 END AS HIDDEN sortValue FROM Comment c ORDER BY sortValue DESC

+0

実際、私はまだ2.1に入っており、更新ベンダーは今の選択肢ではありません。しかし、私はこれを念頭に置いておきます、ありがとうございます。 – artshpakov