1 つのモデルが 2 つのテーブルに分割され、それらの間で 1 対 1 のマッピングが行われている従来の PostgreSQL データベースがあります。
CREATE TABLE auth_user (
id SERIAL,
username VARCHAR(30),
email VARCHAR(75),
password VARCHAR(64),
first_name VARCHAR(75),
last_name VARCHAR(75)
)
CREATE TABLE user_profile (
user_id INTEGER REFERENCES auth_User.id,
phone VARCHAR(32)
)
残念ながら、データベース構造を変更できません。
単品のSequelモデルとして使いたいです。データベースからのデータの取得は期待どおりに機能します。
class User < Sequel::Model
end
# Variant 1: using LEFT JOIN
#User.set_dataset DB[:auth_user].left_join(:user_profile, :user_id => :id)
# Variant 2: using two FROM tables
User.set_dataset DB[:auth_user, :user_profile]\
.where(:auth_user__id => :user_profile__user_id)
user = User[:username => "root"] # This works.
ただし、モデルの保存は失敗します。
user.set :first_name => "John"
user.save # This fails.
データセットの最初のバリアント (を使用left_join
) を使用すると、" Need multiple FROM tables if updating/deleting a dataset with JOINs
" エラーが発生します。2 番目のバリアントを使用しても失敗します: " PG::Error: ERROR: column "phone" of relation "auth_user" does not exist LINE 1: ..."email" = 'nobody@example.org', "password" = '!', "phone"...
"
Sequel に 2 つの UPDATE ステートメントをシームレスに発行させる方法はありますか? (同じ質問が INSERT にも当てはまります)。