删除不适用于 Play! 2.4、Slick 3 和 PostgreSQL
Deleting is not working with Play! 2.4, Slick 3 and PostgreSQL
我读过这篇所以 post:
但在我的情况下似乎不起作用。
我设法在我的 Play! 2.4
应用程序中插入或从我的 PostgreSQL (9.1)
数据库中获取一些数据,但我没有设法执行一些删除。
这是我的控制器的非常简单的代码:
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]
我怀疑是进口的,但试了很多都没有改善。
我怀疑问题是您两次导入了 delete
函数所需的隐含函数,因此产生了歧义并导致编译器放弃它:
import slick.driver.PostgresDriver.api._
import dbConfig.driver.api._
你可能不需要两者之一,如果你想成为通用的(例如,因为你想 运行 通过 H2 测试)尝试删除 PostgresDriver
导入。如果这不起作用,请尝试删除内部导入并将 PostgresDriver
保留为您链接的 SO post 似乎表明 delete
是(是?)不在常见的 API.
我读过这篇所以 post:
但在我的情况下似乎不起作用。
我设法在我的 Play! 2.4
应用程序中插入或从我的 PostgreSQL (9.1)
数据库中获取一些数据,但我没有设法执行一些删除。
这是我的控制器的非常简单的代码:
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]
我怀疑是进口的,但试了很多都没有改善。
我怀疑问题是您两次导入了 delete
函数所需的隐含函数,因此产生了歧义并导致编译器放弃它:
import slick.driver.PostgresDriver.api._
import dbConfig.driver.api._
你可能不需要两者之一,如果你想成为通用的(例如,因为你想 运行 通过 H2 测试)尝试删除 PostgresDriver
导入。如果这不起作用,请尝试删除内部导入并将 PostgresDriver
保留为您链接的 SO post 似乎表明 delete
是(是?)不在常见的 API.