Начиная с Slick в Play 2.5 (scala)

#scala #playframework #slick

#scala #игровая фреймворк #slick

Вопрос:

Я только начинаю копаться в Slick с Play Scala (переход с Anorm) и сразу же сталкиваюсь с проблемами при запуске с запросами.

У меня есть класс таблицы, определенный следующим образом:

 package model

import slick.driver.PostgresDriver.api._
import slick.lifted.{TableQuery, Tag}

case class ApiKey(id: Option[Int] = None, key: String)

object ApiKeys {
  val apiKeys: TableQuery[ApiKeys] = TableQuery[ApiKeys]
}

class ApiKeys(tag: Tag) extends Table[ApiKey](tag, "api_key"){
  def id = column[Int]("id", O.PrimaryKey, O.AutoInc) // This is the primary key column
  def key = column[String]("key")

  override def * = (id.?, key) <> (ApiKey.tupled, ApiKey.unapply)
}
  

Примечание: таблица уже создана в БД

В контроллере, для пробной версии, я пытаюсь вставить значение:

 def index = Action {
    db.withConnection { implicit connection =>
      ApiKeys.apiKeys  = ApiKey(key = "boo")
    }

    Ok("hello")
  }
  

Здесь я получаю сообщение об ошибке:

значение = не является членом slick.lifted .Запрос таблицы[модель.ApiKeys]

Однако все документы, которые я читаю, предлагают сделать именно это. Один из примеров здесь: https://github.com/typesafehub/activator-hello-slick/blob/master/src/main/scala/CaseClassMapping.scala

Чего мне не хватает?

Ответ №1:

Попробуйте импортировать import driver.api._ в контроллер, где вы хотите его использовать. Для меня это сработало бы:

 def test = Action {
  import driver.api._
  db.run(ApiKeys.apiKeys  = ApiKey(key = "boo"))

  Ok("Hallo")
}
  

Несмотря на то, что это очень помогает, помещая все запросы в Dao, так что DB-Config остается в определенных частях приложения.