假设我的数据库中有以下表:
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 的代码生成器,它只生成以下类:
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)