从我的tablequery对象中删除时,我应该能够编写:

FacebookAuths.delete

但它抱怨delete不是TableQuery中的方法,即使我尝试:

Users.filter(_.id === 1337).delete

它仍然说delete不是一个方法,但现在在查询对象上。

我做错了什么?我的进口是:

import scala.slick.lifted._
import scala.slick.driver.JdbcDriver.simple._

和所有其他的东西,如firstOption工作。

我使用postgres。

谢谢!

有帮助吗?

解决方案

您正在使用 Postgres, ,所以你需要 import scala.slick.driver.PostgresDriver.simple._scala.slick.driver.PostgresDriver 而不是 jdbc 同样,同样的事情也适用于你的模式定义的地方。

编辑:

这有点超出了我的知识范围,我不是100%确定,但我会尝试一下。

PostgresDriver 特性扩展 JdbcDriver 特质(来自 JdbcProfile.scala),这是特征签名:

trait PostgresDriver extends JdbcDrive

反过来 JdbcDriver 延伸;延伸 SqlDriver:

trait JdbcDriver extends SqlDriver

firstOption 方法属于 UnitInvoker 特质,所以它不依赖于导入的驱动程序,同样的事情适用于 listfirst 等方法,可以检入 Invoker.scala 档案。该 delete 方法,而不是在定义 DeleteInvoker 课堂内 JdbcInvokerComponent 特质。

我的理解是,当声明一个 TableQuery 对象这是完整的签名:

val table: PostgresDriver.simple.TableQuery[MyTable] = TableQuery[MyTable]

当您使用此签名声明表时:

val table: JdbcDriver.simple.TableQuery[MyTable] = TableQuery[MyTable]

不知道为什么 delete 方法不可用于 Jdbc 直接,可能你必须使用 Query 为此,然后使用 Query.deleteInvoker, ,但正如我所说,我不确定,它看起来也让我感到困惑。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top