4

这是非常非常非常令人沮丧的。一段时间以来,我一直在尝试使用 Slick,但障碍不断出现。Slick 的概念确实很棒,但是学习起来非常困难,而且不像 Scala,它没有“初学者”、“中级”和“高级”的风格,各个阶段的人都可以轻松使用它。

我正在使用 Play-Slick (Slick 2.0.0) https://github.com/freekh/play-slick,遵循其 Multi-DB cake 示例:https ://github.com/freekh/play-slick/tree /master/samples/play-slick-cake-sample/app

出于某种原因,首先,ddl不属于TableQuery,不像文档中的声明:“TableQuery 的 ddl 方法创建 DDL”。这通过 scaladoc 显示:http ://slick.typesafe.com/doc/2.0.0/api/#scala.slick.lifted.TableQuery那里没有ddl方法。

其次,我slick.lifted.Query无法生成delete方法。它适用于list,但不适用于delete

val S3Files = TableQuery[S3Files]
S3Files.where(_.url === url).delete

这行不通……然后我尝试了:

val query = (for(s <- S3Files if s.url === url) yield s)
query.list  //this works
query.delete //ehh?? can't find the method

val query2 = (for(s <- S3Files if s.url === url))
query2.delete //still won't work

嗯……因为 Slick 使用了一个非常复杂的(至少对新手来说)隐式类型转换系统,我真的不知道出了什么问题。

4

2 回答 2

3

我通过简单地添加来尝试它

Cats.ddl.create
Cats.filter(_.name===cat.name).delete

play-slick-cake-sample/app/controllers/Application.scala. 对我来说很好。

看起来您使用了错误的导入。查看https://github.com/freekh/play-slick/blob/master/samples/play-slick-sample/app/controllers/Application.scala并模仿导入。

于 2014-04-12T12:32:03.960 回答
1

slick 0.8.1 和 slick 2.1.0 和我有同样的问题。

delete 在 Query 上不可用的原因是 play-slick Query 不包含与 slick Query 中的 delete 方法等效的方法。

我通过更改为原来的光滑驱动程序解决了这个问题

//import play.api.db.slick.Config.driver.simple._ //play-slick extensional Driver
import slick.driver.PostgresDriver.simple._       //original slick Driver
于 2015-04-07T14:58:59.893 回答