0

我想做的事情对我来说感觉很基本,但是我没有找到一种方法来使用 DataMapper 而不求助于原始 SQL。这看起来像:

select u.id, u.name, count(p.id) as post_count
from posts p
inner join users u on p.user_id = u.id
group by p.user_id
order by post_count desc;

上述查询的目的是向我显示所有用户,按每个用户拥有的帖子数排序。我使用 DataMapper 发现的最接近的是aggregate,它不会给我返回资源对象。我想要是某种方式来生成一个查询并取回标准 DM 对象。

4

1 回答 1

-1

假设你有关系

has_n, :posts

你应该能够做到

User.get(id).posts.count

或者

User.first(:some_id => id).posts.count

或者

u = User.get(1)
u.posts.count

您还可以链接条件

User.get(1).posts.all(:date.gt => '2012-10-01')

在此处查看范围和链接http://datamapper.org/docs/find.html

最后添加排序

User.get(1).posts.all(:order => [:date.desc])
于 2012-10-30T03:12:16.200 回答