我想用模型对我的模型的关联ArrayCollection
进行排序,如下所示(我知道以下代码不起作用):
/**
* @OneToMany (targetEntity="Review", mappedBy="product")
* @OrderBy ({"voted_up / voted_down" = "DESC"})
*/
protected $reviews;
这可能直接在模型定义中出现,还是我需要在请求数据时在ArrayCollection
上使用sort()?
答案 0 :(得分:2)
使用Doctrine 2.1,您可以直接在模型定义中执行此操作,但不能使用@OrderBy。您可以在模型级别定义DQL片段,如2.1 Beta release notes中所述:
元数据中命名的DQL查询:您可以使用@NamedQueries(@NamedQuery(名称=" foo",查询=" DQL")在映射文件中添加dql查询)并通过$ em-> getRepository() - > getNamedQuery()访问它们。
因此,您可以使用ORDER BY关键字创建DQL查询,例如:
SELECT c.id, c.text, (c.voted_up / c.voted_down) AS sortkey FROM Comment c
ORDER BY sortkey DESC
因此,我想你会将这个注释添加到模型定义中,例如:
/**
* @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 {
...
}
然后在您的代码调用上:
$em->getRepository("Comment")->getNamedQuery("sortedComment");
我没有测试过这个,但你明白了。