2015-01-22 3 views
1

Я хотел бы добавить значения «look-up» из таблицы, которая связана (две отношения) с основной таблицей. Я работаю с устаревшей базой данных.Добавить ассоциации поиска и псевдонимы столбцов к модели Sequel

Первичная таблица:

CREATE TABLE foo_table (
    id INT PRIMARY KEY NOT NULL, 
    name VARCHAR(255), 
    created_key INT, 
    modified_key INT 
) 

ключ/значение таблицы:

CREATE TABLE key_value (
    key INT PRIMARY KEY NOT NULL, 
    name VARCHAR(50) 
) 

Цель состоит в том, чтобы генерировать SQL, как:

SELECT foo_table.id, foo_table.name, foo_table.created_key, foo_table.modified_key, 
     kv0.name version_created, 
     kv1.name version_modified 
FROM foo_table 
LEFT OUTER JOIN key_value kv0 on key.created_key=kv0.key 
LEFT OUTER JOIN key_value kv1 on key.modified_key=kv1.key 

модель Primary таблицы:

class Foo < Sequel::Model (:foo_table) 

    set_primary_key [:id] 

    # stuck here 
    self.left_outer_join(:key_value, :key => :created_key) 
    self.left_outer_join(:key_value, :key => :modified_key) 

end 

Есть ли элегантный способ добавить эти ссылки и псевдонимы столбцов к модели?

ответ

0

я решил добавить таблицу ключ/значение модели:

class KeyValue < Sequel::Model (:key_value) 

    set_primary_key [:key] 

    # add association 
    one_to_many :foo_table 

end 

Затем добавить ассоциацию во второй модели:

class Foo < Sequel::Model (:foo_table) 

    set_primary_key [:id] 

    # add associations 
    many_to_one :created, :class=>:KeyValue, :key => :created_key, :foreign_key => :key 
    many_to_one :modified, :class=>:KeyValue, :key => :modified_key, :foreign_key => :key 

end