Let's say I have the following tables in my database:
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)
);
Given such a schema, I want to use Slick to load dealers in 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)
How about something a bit more complicated:
What if I wanted to keep track of count of models in each dealership:
case class Dealer(id: Int, name: String, models: Map[Car, Int])
and this was my mapping table instead:
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)
);
I am familiar with Ruby's ActiveRecord and Java's Hibernate framework where these things are easy to do but I am having a hard time doing it in Slick since Slick does not map nested models into foreign keyed tables. I am using Slick's codegen which only generates the following classes:
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)