题
从我的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
特质,所以它不依赖于导入的驱动程序,同样的事情适用于 list
和 first
等方法,可以检入 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
, ,但正如我所说,我不确定,它看起来也让我感到困惑。