在Scala Slick或flatten嵌套元组中连接三个表
我需要对三个表进行内部联接,因为第一个表中有外键,如下所示:在Scala Slick或flatten嵌套元组中连接三个表,scala,tuples,slick,Scala,Tuples,Slick,我需要对三个表进行内部联接,因为第一个表中有外键,如下所示: CREATE TABLE "product" ( "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "name" VARCHAR NOT NULL, "price" FLOAT NOT NULL, "categoryid" INT NOT NULL,
CREATE TABLE "product" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"name" VARCHAR NOT NULL,
"price" FLOAT NOT NULL,
"categoryid" INT NOT NULL,
"supplierid" INT NOT NULL,
FOREIGN KEY(categoryid) references category(id),
FOREIGN KEY(supplierid) references supplier(id)
);
在模型中,我有一个方法来处理列表所有:
def list(): Future[Seq[(Product, Category, Supplier)]] = db.run {
productTable.join(categoryTable).on(_.categoryid === _.id).join(supplierTable).on(_._1.supplierid === _.id).result
}
但这将返回嵌套元组而不是平面元组:((产品,类别),供应商)。
然后,我应该如何连接这些表以获得平坦的元组,或者,如果不可能做到这一点,我应该如何平坦这个元组
编辑:
实际上,我找到的唯一适合我的解决方案是手动使用地图:
def list(): Future[Seq[(Product, Category, Supplier)]] = db.run {
productTable.join(categoryTable).on(_.categoryid === _.id).join(supplierTable).on(_._1.supplierid === _.id).result.map(a => Seq((a(1)._1._1,a(1)._1._2,a(1)._2)))
}
看起来和感觉都很可怕。但到目前为止,只有这样做有效。。。
有更好的想法吗?内部联接在Slick中表示为理解:
def list():Future[Seq[(产品、类别、供应商)]]=db.run{
为了{
这是否回答了您的问题?@AlleXyS:您提供的答案给出了我现在得到的嵌套元组的结果