2011-06-05 6 views
0

私はこのような(私は次のコードは動作しません知っている)、商と私のモデルの関連するArrayCollectionをソートしたい:Doctrine2 @OrderBy計算フィールドですか?

/** 
* @OneToMany (targetEntity="Review", mappedBy="product") 
* @OrderBy ({"voted_up/voted_down" = "DESC"}) 
*/ 
protected $reviews; 

は、モデル定義で直接この可能なものですか、私は単純にする必要がありますかデータを要求するときにArrayCollectionにsort()を使用しますか?

+0

名前として「voted_up/voted_down」というフィールド名を真剣に使用していますか?私は批評家になりたくありません。しかし、私はそれが何らかのabobinationだと思う。 – renoirb

+0

申し訳ありません。明確にするために、それは計算です。 "voted_up"はintフィールド、 "voted_down"はintフィールドです。 – iamdev

答えて

2

Doctrine 2.1では、モデル定義で直接行うことができますが、@OrderByではできません。で述べたようにあなたは、モデルレベルでDQLスニペットを定義することができ2.1 Beta release notes

メタデータでDQLクエリ名前:あなたは@NamedQueriesを使用してマッピングファイル(@NamedQuery(名前=「foo」という中でDQLクエリを追加することができ、クエリ= "DQL"))、$ em-> getRepository() - > getNamedQuery()でアクセスします。

そのようにあなたは、キーワードBY ORDERで何かあなたのDQLクエリを作成することができます。

/** 
* @Entity 
* @Table(name="comment") 
* @NamedQueries(@NamedQuery(name="sortedComment", query="SELECT c.id, c.text, (c.voted_up/c.voted_down) AS sortkey FROM Comment c ORDER BY sortkey DESC")) 
*/ 
class Comment { 
    ... 
} 
:だから

SELECT c.id, c.text, (c.voted_up/c.voted_down) AS sortkey FROM Comment c 
ORDER BY sortkey DESC 

を、私は、あなたがモデル定義にこの注釈を追加するようなものを想像します

そして、あなたのコードの呼び出しに:

$em->getRepository("Comment")->getNamedQuery("sortedComment"); 

私は目をテストしていませんしかし、あなたは考えを得る。

+0

それは素晴らしいニュースです!私はまだ2.0を使用しているので、私は安定した2.1を待つ間に解決策をハックします。あなたの答えはありがとう、偽造! – iamdev

関連する問題