Добавить сопоставления поиска и псевдонимы столбцов в модель сиквела

Я хотел бы включить "справочные" значения из таблицы, которая связана (две взаимосвязи) с основной таблицей. Я работаю с устаревшей базой данных.

Основная таблица:

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

Модель первичного стола:

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

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

1 ответ

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

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
Другие вопросы по тегам