删除不适用于Play! 2.4,Slick 3和PostgreSQL

时间:2015-10-01 13:13:57

标签: scala postgresql-9.1 playframework-2.4 slick-3.0

我已阅读此帖子:Play 2.4 - Slick 3.0.0 - DELETE not working

但似乎在我的情况下不起作用。

我设法在我的PostgreSQL (9.1)应用程序中插入或获取Play! 2.4数据库中的一些数据,但我无法执行某些删除操作。

以下是我的控制器的非常简单的代码:

package controllers

import javax.inject.Inject
import play.api.db.slick.DatabaseConfigProvider
import play.api.mvc._
import slick.driver.JdbcProfile
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Future
import slick.driver.PostgresDriver.api._
import models.Address

class Application @Inject()(dbConfigProvider: DatabaseConfigProvider) extends Controller {
  val dbConfig = dbConfigProvider.get[JdbcProfile]
  import dbConfig._
  import dbConfig.driver.api._

  def index = Action.async {
    db.run(addresses.filter(_.id === 1L).delete) map { res =>
      Ok(Json.toJson(res))
    }
  }
}

和我的模型Address

case class Address(id: Option[Long], city: String)

object Address {

  class Addresses(tag: Tag) extends Table[Address](tag, "addresses") {
    def id = column[Long]("addressid", O.PrimaryKey, O.AutoInc)
    def city = column[String]("city")

    def * = (id.?, city) <>
      ((Address.apply _).tupled, Address.unapply)
  }

  lazy val addresses = TableQuery[Addresses]
}

我得到的编译错误是:value delete is not a member of slick.lifted.Query[models.Address.Addresses,models.Address.Addresses#TableElementType,Seq]

我怀疑它来自进口,但我尝试了很多东西而没有任何改进。

1 个答案:

答案 0 :(得分:1)

我怀疑问题是你导致delete函数两次所需的隐含,从而产生歧义并导致编译器放弃:

import slick.driver.PostgresDriver.api._
import dbConfig.driver.api._

如果你想要通用(例如因为你想在H2上运行测试),你可能无论如何都不需要其中一个。尝试删除PostgresDriver导入。如果这不起作用,请尝试删除内部导入并离开PostgresDriver,因为您链接的SO帖子似乎表明delete(是?)不在公共API中。