在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:您提供的答案给出了我现在得到的嵌套元组的结果