データベースに次のテーブルがあるとします。
CREATE TABLE dealers(
id INT PRIMARY KEY,
name VARCHAR(255)
);
CREATE TABLE makers(
id INT PRIMARY KEY,
name VARCHAR(255)
);
CREATE TABLE cars(
id INT PRIMARY KEY,
make INT FOREIGN KEY makers(id),
model VARCHAR(255),
year INT
);
CREATE TABLE cars_in_dealers(
car_id INT FOREIGN KEY cars(id),
dealer_id INT FOREIGN KEY dealers(id),
UNIQUE KEY (car_id, dealer_id)
);
このようなスキーマが与えられたので、Slick を使用して Scala でディーラーをロードしたいと思います。
case class Dealer(id: Int, name: String, models: Set[Car])
case class Car(id: Int, make: Maker, model: String, year: Int)
case class Maker(id: Int, name: String)
もう少し複雑なことはどうですか:
各ディーラーのモデル数を追跡したい場合はどうすればよいでしょうか。
case class Dealer(id: Int, name: String, models: Map[Car, Int])
これは代わりに私のマッピングテーブルでした:
CREATE TABLE cars_in_dealers(
car_id INT FOREIGN KEY cars(id),
dealer_id INT FOREIGN KEY dealers(id),
count INT,
UNIQUE KEY (car_id, dealer_id)
);
Ruby の ActiveRecord と Java の Hibernate フレームワークには慣れていますが、これらは簡単に実行できますが、Slick ではネストされたモデルを外部キー付きテーブルにマップしないため、Slick でそれを行うのに苦労しています。次のクラスのみを生成する Slick の codegen を使用しています。
case class DealersRow(id: Int, name: String)
case class MakersRow(id: Int, name: String
case class CarsRow(id: Int, make: Int, model: String, year: Int)
case class CarsInDealersRow(carId: Int, dealerId: Int)