我有两张桌子
users
-------
id
name
organization_id
organizations
----------
id
org_name
org_unique_num
abc
xyz
users表中的 organization_id
是组织表id的外键
class Organization
include DataMapper::Resource
property :id, Serial
property :org_name, String
property :org_unique_num, Integer
property :abc String
property :xyz String
has n, :users
end
class User
include DataMapper::Resource
property :id, Serial
property :name, String
property :organization_id, Integer
property :age, Integer
belongs_to :organization
end
我想通过加入用户年龄>的组织表来获取用户的记录。 25.所以结果看起来应该是
user_id name organization_id org_name org_unique_num age
12 John 356 ATT 76763 38
35 Lisa 981 IBM 2376 28
那我怎么能做到这一点?请注意我不希望结果中有列abc和xyz。
User.all(:age.gt => 25)
这只会给我年龄> 25的用户,但我也想抓住用户的组织信息。有可能做一个声明吗?或者必须分多步完成。就像收集所有user_id一样,然后传递给组织模型,在()中使用id,这将是丑陋的。
任何帮助将不胜感激。
答案 0 :(得分:2)
DataMapper将为您完成所有加入工作。
您不需要为每个用户提取组织,这是自动完成的。
因此,您只需使用以下内容获取用户:User.all(:age.gt => 25)
每个用户都会将其组织附加到其中:
User.all(:age.gt => 25).each do |user|
p user.name
# organization not yet fetched, only referenced
p user.organization
# now organization are fetched
p user.organization.id # display org ID
p user.organization.org_name # display org name
# etc
end
注意“我不需要abc
和xyz
”,如果它们是Text
列,DataMapper会懒洋洋地加载它们,这意味着只有在通过{{ 1}}和user.abc