0

私は2つのテーブルを持っています

users
-------
id
name
organization_id


organizations
----------
id
org_name
org_unique_num
abc
xyz

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 歳以上のユーザーが得られますが、ユーザーの組織情報も取得したいと考えています。それを1つのステートメントにすることは可能ですか?または、複数の手順で実行する必要があります。すべての user_id を収集してから、id in(). を使用して Organization モデルに渡すのと同じように、これは醜いでしょう。

どんな助けでも大歓迎です。

4

1 に答える 1

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

「i do not need abcand xyz」に関して、それらがText列の場合、DataMapper はそれらを遅延ロードします。つまり、データはuser.abcandを介して要求された場合にのみフェッチされます。user.xyz

于 2012-12-01T01:44:35.020 に答える