Добавить сопоставления поиска и псевдонимы столбцов в модель сиквела
Я хотел бы включить "справочные" значения из таблицы, которая связана (две взаимосвязи) с основной таблицей. Я работаю с устаревшей базой данных.
Основная таблица:
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