Получение значений через внешние ключи с помощью DataMapper - PullRequest
1 голос
/ 05 апреля 2011

У меня есть две таблицы, nodes и terms.

Соответствующие поля в nodes: nid (первичный ключ) и value
В terms это: value, tid и nid, где value и tid вместе являются первичным ключом, а nid - внешним ключом, ссылающимся на nodes.nid.

Я хочу добавить записи в terms. У меня есть tid и nid, а также value, которые я хочу вытащить из соответствующего node - например, найдите value для данного nid в node и затем поместите его как value в terms.

Способ сделать это в SQL может быть следующим:

INSERT INTO terms(tid, nid, value)
values(mytid, mynid, (
    select value from nodes where nid=mynid
));

Может ли кто-нибудь помочь мне сделать это с DataMapper?

class Node
    include DataMapper::Resource

    property :nid,    Serial,  :key => true
    property :value,  Integer

end


class Term
    include DataMapper::Resource

    property :tid,    Integer, :key => true

    # how do I define nid and value?
end

# and then what do I give to Term.new or Term.create and how?

Если бы кто-нибудь мог указать мне и на хорошее руководство по DataMapper, я был бы признателен. Я использовал их онлайн-документы, но обнаружил, что ситуации, в которых я нахожусь, редко освещаются.

1 Ответ

1 голос
/ 06 апреля 2011

По вашему описанию модели, которые вы ищете, должны быть настроены так:

class Node
  include DataMapper::Resource

  property :nid,    Serial
  property :value,  Integer
end

class Term
  include DataMapper::Resource

  property :tid,   Integer, :key => true
  property :value, Integer, :key => true

  belongs_to :node, :child_key => :nid
end

Вы можете работать с этими моделями так:

# create a node
node = Node.create(:value => 123)

# create a term and associate it with the node
term = Term.create(:tid => 321, :node => node, :value => node.value)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...