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

Posted

技术标签:

【中文标题】删除不适用于 Play! 2.4、Slick 3 和 PostgreSQL【英文标题】:Deleting is not working with Play! 2.4, Slick 3 and PostgreSQL 【发布时间】:2015-10-01 13:13:57 【问题描述】:

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

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

我设法在我的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]

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

【问题讨论】:

您能描述一下您的错误吗?是编译过程、空指针异常、意外行为、海狸啃你的以太网电缆还是其他原因? 糟糕,我已经编辑了我的帖子。 【参考方案1】:

我怀疑问题在于您两次导入 delete 函数所需的隐式,从而产生歧义并导致编译器放弃:

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

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

【讨论】:

确实,删除里面的import dbConfig.driver.api._解决了,谢谢!

以上是关于删除不适用于 Play! 2.4、Slick 3 和 PostgreSQL的主要内容,如果未能解决你的问题,请参考以下文章

Play 2.4 中的 Slick 3.0 事务

升级 Play 到 2.4,Slick 到 3.1.1,值 withTransaction 不是 play.api.db.slick.Database 的成员

在 Play framework 2.4 中使用 Slick 3 在哪里初始化数据库?

如何使用Slick和Play在测试中应用手动演变! 2.4

使用 Slick、specs2 和 Postgresql 进行 2.4 测试

HTML5 视频自动播放不适用于 slick.js